2009-06-19 181 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();