【问题标题】:Display image returned as byte array from MVC Controller through Ajax call显示图像通过 Ajax 调用从 MVC 控制器返回为字节数组
【发布时间】:2012-10-17 22:53:16
【问题描述】:

点击 HTML 表中的一行时,将对 MVC3 控制器进行 ajax 调用,该控制器返回一个带有图像字节数组的 json 对象,但视图中显示的是空图像。这应该适用于 IE 7 到 9

控制器代码为:

    [HttpPost]
    public ActionResult RenderImage(string code)
    {
        ImageVM viewmodel = GetImage(code)
        return Json(viewmodel.Chart, "image/png");
     }

引发ajax调用并显示图像的javascript代码是

  $(document).ready(function () {
      $('#Table tr').click(function (event) { 
      var id= $(this).attr('id')
         $.post("/Gateway/RenderImage", { "code": id },
     function (data) {
                alert(data);
            $('#ChartDiv').html('<img height="200" width="250" src="data:image/png;base64,' + data + '" />');

            });
       });
  });

【问题讨论】:

    标签: asp.net-mvc-3 image


    【解决方案1】:

    我稍微更改了您的代码,这对我有用 :)

     [HttpPost]
            public virtual JsonResult RenderImage(string code)
            {
    //for test data Im using the below, you can use yours :   GetImage(code)        
    var data =   
      @"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC";
                return Json(data);
            }
    

    在 Javascript 中(去掉一个反斜杠)

     $('#Table tr').click(function (event) {
            var id = $(this).attr('id')
            $.post("Gateway/RenderImage", { "code": id },
        function (data) {
            alert(data);
            $('#ChartDiv').html('<img height="200" width="250" src="data:image/png;base64,' + data + '" />');
    
        });
        });
    

    [编辑] 为了使上述代码与 png 文件一起使用,我们可以将控制器操作更改为以下内容:

    [HttpPost]
    public virtual JsonResult RenderImage(string code)
    {
        var filePath = "~/Images/PngExampleImag.png";
        var ImageBytes = System.IO.File.ReadAllBytes(Server.MapPath(filePath));
        var data = Convert.ToBase64String(ImageBytes);
        return Json(data);
    }
    

    【讨论】:

    • 我尝试使用 RenderImage 操作“return Json(System.IO.File.ReadAllBytes(errorFilePath))”中的此代码返回 png 字节数组,但仍然无法在查看
    • @user1570697 我编辑了答案并对操作进行了小修改以使其返回 png 图像文件,我对其进行了测试,并且它与我的应用程序一起使用。希望这会有所帮助。
    • 我尝试了带有示例图像的控制器代码 var filePath = "~/Images/Error.png"; var ImageBytes = System.IO.File.ReadAllBytes(Server.MapPath(filePath)); var base64data = Convert.ToBase64String(ImageBytes);返回 Json(base64data);仍然图像没有得到更新,即使数据来自 ajax 回调,可能是这不能正常工作 $('#ChartDiv').html('');我使用 IE 9
    • 我通过 ajax 调用获取了整个 DIV 数据,因为它没有为 $('#ChartDiv').html(''); ?
    猜你喜欢
    • 1970-01-01
    • 2010-12-21
    • 2012-08-05
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2012-02-28
    相关资源
    最近更新 更多