2011-04-18 67 views
0

我有一个自定义处理程序(ImageHandler.ashx),在浏览时可以正常工作。它在服务器上找到一个zip文件,解压缩并将位图保存到OutputStream中。当我尝试使用ashx使用jQuery加载时,我的png内容会以编码,乱码字符的形式返回,而不是显示图像。使用jQuery加载自定义http处理程序ashx文件来显示png

Bitmap convertedImg = new Bitmap(zInStream); 
convertedImg.Save(context.Response.OutputStream, ImageFormat.Png); 
+1

向我们展示您的jQuery代码 – andynormancx 2011-04-18 17:17:47

回答

2

那是因为你是从服务器请求是一个图像,它不是HTML代码,显示的图像。

而不是使用load方法,只需要创建一个图像元素的URL的处理程序源:

$('#SomeElement').append($('<img/>', { src: 'ImageHandler.ashx', alt: 'An image' })); 

注意:如果压缩文件包含一个PNG图像,那么你不必将它解压缩到一个Bitmap对象,然后再将它打包为PNG格式,您可以直接将zip流的内容发送到响应流。

+0

嘿古法,这是一个伟大的想法,它的工作完美 - 谢谢! – CtrlShiftF11 2011-04-18 18:15:13

+0

顺便说一句,在参考你的笔记 - 检索的图像通常是一个TIFF或BMP文件,所以这就是为什么我正在进行转换。 – CtrlShiftF11 2011-04-18 18:32:56

0

确保您设置的内容类型上你的回应"image/png"像这样:

context.Response.ContentType = "image/png"; 
Bitmap convertedImg = new Bitmap(zInStream); 
convertedImg.Save(context.Response.OutputStream, ImageFormat.Png); 

这确保了浏览器将把返回的内容作为一个PNG图像,而不是text/html的。

编辑
另外,我建议对每一个图像加载时间做CPU密集型减压。如果你只解压缩一次,然后再引用解压缩后的版本,它会更快(对你的服务器更好)。

相关问题