2009-06-19 23 views
1

ASP.NETアプリケーション用のIIS6でWebサイトを実行しており、圧縮が有効になっています。これは.aspx Webページで正常に機能しました。ASP.NETで圧縮応答を送信

ポストバック応答の一部として送信されるバイナリファイルがダウンロードされます。リンクボタンは 'excelにダウンロード' - ユーザがクリックしてコードがバイナリファイルを生成し、Response.Clear()を実行してResponse.OutputStreamにファイルを書き込みます。

レスポンスはブラウザに表示されますが、常にゼロバイトです。したがって、Webブラウザは圧縮された応答を期待しており、生のバイナリは有効な圧縮ストリームではないため、失敗します。私はレスポンスをクリアした場合、これがなぜ必要なのか疑問に思っています。確かにレスポンスヘッダ(圧縮の指定)もクリアされていますか?

ので、2つの疑問が生じ:

1)私は、圧縮された応答を送信するために、バイナリファイルを圧縮する方法は? 2)IIS圧縮が有効になっているかどうかを実行時に確認するにはどうすればよいですか?

乾杯

答えて

3

私は、これは確かにIISの圧縮によるものであるという事実を隔離するために、圧縮を無効にし、これはまだ動作するかどうかをチェックします。私は問題なくPDFファイル(バイナリ)を提供するIIS/Compression対応のサイトを運営しているので、

とにかくここに私のために働くコードの部分があります。

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(); 
関連する問題