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密集型減壓。如果你只解壓縮一次,然後再引用解壓縮後的版本,它會更快(對你的服務器更好)。

相關問題