2009-06-19 183 views
1

我正在IIS6上運行ASP.NET應用程序和啓用的壓縮的網站,該壓縮對於.aspx網頁正常工作。在ASP.NET中發送壓縮響應

什麼不工作是下載的二進制文件,作爲回發響應的一部分進行傳輸:例如,鏈接按鈕是'下載到excel' - 用戶單擊並且代碼生成一個二進制文件,執行一個Response.Clear(),然後將該文件寫入到Response.OutputStream。

瀏覽器可以看到響應,但始終爲零字節。因此,我假定Web瀏覽器期待壓縮響應,並且由於原始二進制文件不是有效的壓縮流,它將失敗。我很疑惑爲什麼這應該是如果我已經清除了響應 - 肯定應答頭(指定壓縮)也被清除?

所以出現了兩個問題:

1)我怎麼壓縮二進制文件發送一個壓縮的響應? 2)如何在運行時檢查IIS壓縮是否啓用?

乾杯

回答

3

我將禁用壓縮,並檢查這是否仍然有效,只是孤立的事實,這確實是由於IIS壓縮。我告訴你'因爲我正在運行一個啓用IIS /壓縮的網站,它提供PDF文件(二進制),沒有問題。

無論如何,這裏是代碼對我有用的部分。

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

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); 
Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 
Response.AddHeader("Content-transfer-encoding", "8bit"); 
Response.AddHeader("Cache-Control", "private"); 
Response.AddHeader("Pragma", "cache"); 
Response.AddHeader("Expires", "0"); 

Response.ContentType = "application/pdf"; 
Response.WriteFile(filePath); 

Response.Flush(); 
Response.Close(); 
HttpContext.Current.ApplicationInstance.CompleteRequest();