【问题标题】:Webapi return binary image to be displayed using jquery Ajax methodWebapi返回要使用jquery Ajax方法显示的二进制图像
【发布时间】:2014-07-14 03:20:01
【问题描述】:

我有以下 webapi 方法

    public HttpResponseMessage GetImage()
    {
        string imgUri = HttpContext.Current.Server.MapPath("~/Images/htmllogo.png");
        var response = Request.CreateResponse(HttpStatusCode.OK);
        response.Content = new StreamContent(new FileStream(imgUri, FileMode.Open));

        response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");

        return response;
    }

我也有以下html

 <div><button id="loadImage">Load</button></div>
<div id="divImageHolder"></div>

我正在使用 jquery 的 Ajax 方法来检索我的图像,如下所示:

$("#loadImage").click(function () {
        var options = {};
        options.url = "api/mywebapi/GetImage";
        options.type = "GET";
        //options.dataType = "image/png";
        options.contentType = "image/png";
        options.success = function (results) {          
            var imag = "<img " + "src='" + results + "'/>";

            $("#divImageHolder").html(imag);             

        };
        options.error = function (jqXHR, textStatus, errorThrown)
        {
            console.log(errorThrown);
        };
        $.ajax(options);
    });    

单击按钮后我看到的是 divImageHolder div 中的“二进制垃圾”。没有显示图像

我尝试在结果之前将“data:image/png;base64”添加到 src 属性,但没有奏效。我认为原因是 base64 是文本编码,但我收到的是二进制数据。

如果我使用 Json 并将图像转换为 base64 编码(在 web api 方法中),那么它可以正常工作,但是我无法让它与二进制文件一起使用,即我的 web api 方法正在返回 StreamContent。

options.dataType 被故意注释掉,因为它只接受 json。如果我取消注释它,我会得到一个错误。错误是“没有从文本到图像/ png 的转换”,但如果我把它注释掉,我会设法获得成功方法,在那里我可以看到二进制结果

谢谢

苏尔

【问题讨论】:

  • 您正在将结果数据设置为图像...如果您只是调用get,则将图像的源设置为url...
  • 您能详细说明一下吗?你能用代码写吗?请注意,web api 正在返回 HttpResponseMessage
  • 你的建议奏效了,我刚刚尝试过,但我仍然想看看是否有办法使用检索到的二进制数据使用 jquery Ajax 方法显示图像
  • 嗯,有点,问题是浏览器并不真正支持它,据我所知,二进制数据类型。你得到一个字节数组,你需要转移来创建一个对象。一旦您拥有该对象,只需调用 URL.createObjectURL(data) 并将其分配给图像 src。像这样排序(这都是在客户端完成的,但带有文件控制,所以略有不同,只是显示 URL 的东西)philliphaydon.com/2014/04/…
  • 数据网址:en.wikipedia.org/wiki/Data_URI_scheme 除了最简单的图像之外,您不应该这样做的原因有很多。 @Phill 的建议是要走的路

标签: jquery ajax asp.net-web-api


【解决方案1】:

This post here by @gaetanoM should solve this problem, basically by doing the base64 converson in the javascript

'mimeType: "text/plain; charset=x-user-defined"' 也可能是必需的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    相关资源
    最近更新 更多