2012-10-16 81 views
0

希望這不是一個重複...保存巴紐的OutputStream截斷

假設我有在大小png格式,300KB左右一個形象,我把它發送到客戶端從aspx文件是這樣的:

Bitmap img = new Bitmap(filepath); 
using(MemoryStream ms = new MemoryStream()) 
{ 
    img.save(ms, ImageFormat.Png); 

    Response.ContenType="image/png"; 
    ms.WriteTo(Response.OutputStream); 
} 
img.Dispose(); 

在客戶端的JavaScript,它只是:

var img = new Image(); 
img.src = xxx.aspx?param=semething; 

這通常工作......但偶爾的響應似乎被縮短。 Chrome會等待請求,直到超時。在Firebug,在圖像中的Net選項卡下查看,請求實際顯示是這樣的:

Get xxx.aspx?param=something hostUrl 0(14.7mb) 127.0.0.1:80 

這14.7MB小艾...的bizzare它看似超時後,螢火蟲實際上顯示整個加載的圖像雖然..所以IIS看起來已經發出了在這種情況下的一切......

在所有情況下,標題正確顯示contentType和content-Length。 有些時候,請求不會結束,直到我關閉瀏覽器或從網頁中拉出圖像。然後,我可以找到IIS向事件日誌發送錯誤消息,說明遠程主機關閉了連接。

我只是似乎無法針點問題......

  • 編輯 -

改爲根本就一個Response.TransmitFile(文件路徑),但問題仍然存在。 至少在Chrome中,我認爲請求最終在90秒後被瀏覽器終止。 IIS沒有記錄任何錯誤... 看起來像IIS認爲它已經完成了所有必須要做的事情......但在本地機器上瀏覽器的路上失去了一些東西......

我帶系統到另一臺機器,並對其進行測試後... 並且還嘗試改變以後ashx的...

回答

1

不知道你需要什麼其他的代碼有運行,但要確保清除您迴應你寫東西進去之前,首先:

Response.Clear(); 
Response.ClearContent(); 
Response.ClearHeaders(); 

此外,我強烈建議你使用Response.TransmitFile,而不是讀文件到內存,讀取它,然後寫入到輸出流中可能是非常消耗內存。

編輯

此外,如果你可以改變使用.ashx的,而不是它的.aspx可能會更快。

+0

太好了。我會給它一點,先測試一下。 – user1600124

+0

好吧...我試着用Response.TransmitFile,並且清除響應內容。但問題依然存在。 當我有更多的時間在我的手上,我會嘗試做一個.ashx,看看它是怎麼回事。 – user1600124

+0

你有任何進一步的代碼沒有張貼在這裏後,在文件閱讀? –