我想通过一个httphandler显示一个二进制图像。这里是我的代码:试图通过HttpHandler显示一个二进制图像
Ajax调用
$.ajax({
type: "GET",
url: "AnswerPostHandler.ashx",
data: "imgid=1380",
success: function (msg) {
$(parent).append(msg);
},
error: function (msg){
alert(msg);
}
});
处理程序代码
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/JPEG";
try
{
krystaladbDataContext db = new krystaladbDataContext();
var binimg = (from i in db.image_tables
where i.IMG_ID.Equals(1380)
select i.IMG_THUMB).Single();
byte[] b = binimg.ToArray();
MemoryStream ms = new MemoryStream(b);
Image img = Image.FromStream(ms);
img.Save(context.Response.OutputStream,
System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (Exception ex)
{
context.Response.Write(ex);
}
}
东西似乎仍然不就在这里,它是倾销的二进制数据。 Base64编码也是一种选择,但是我已经测试过了,它在IE 7上不起作用(从字面上看,它就是图像的一部分)。
你能告诉我我在做什么错在这里,以及如何让它正确吗?感谢
不需要构造图像。只需写入字节数组 - context.Response.BinaryWrite(b); – adatapost 2011-12-24 12:05:50
我试图做到这一点,但图像不会显示... – 2011-12-24 12:26:46
要不能写入ajax输出(二进制)到DOM元素。您可以使用base64 DataURI(在这种情况下,您必须修改处理程序代码),但浏览器有许多问题。最好和简单的选择是使用 - 图像标签。 – adatapost 2011-12-24 13:00:02