【发布时间】: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