【问题标题】:Problems with Response.TransmitFile, Response.End and IEResponse.TransmitFile、Response.End 和 IE 的问题
【发布时间】:2009-12-08 19:59:27
【问题描述】:

我正在开发一个 ASP.NET 应用程序,它在某一时刻使用 Response.TransmitFile 向用户发送一个文件。

它在我的开发机器上运行良好,当我将它部署到测试服务器时,它仍然可以在其中两个服务器上运行;虽然在其中一台服务器(W2K3)中它只适用于 Firefox,但当我在 IE7 上尝试它时,我收到一个错误,例如“Internet Explorer 无法在(服务器名称)上打开文件 sendfile.aspx”。

我创建了一个小的内联 aspx 页面来重现问题,这里是:

<%@ Page Language="C#" %>
<html><head>
<script language="CS" runat="server">
    void Page_Load(object sender, System.EventArgs e) 
    {
        string filePath = @"C:\temp\export.zip";
        Response.ClearHeaders();
        Response.ContentType = "application/zip";
        Response.Clear();
        Response.AppendHeader("Content-disposition", "attachment; filename=export.zip");
        Response.TransmitFile(filePath);
        Response.End();
    }
</script>
</head></html>

我尝试了不同的方法,我注意到如果我注释掉 Response.End 行,它会再次起作用(但是根据我在网上找到的每个示例代码,AFAIK 这行应该在那里)

我注意到的另一个可能相关也可能不相关的问题是,如果我删除 &lt;html&gt;, &lt;head&gt; 及其结束标签,它也会失败。

我一直在为这个问题摸不着头脑,有人知道如何让它工作吗?

【问题讨论】:

  • 能否请您发布您推荐的示例链接。

标签: asp.net response.transmitfile


【解决方案1】:

不要使用 Response.End();

试试

Response.TransmitFile(filePath);
Response.End();

其实在.NET 2.0之后,你应该使用

Response.TransmitFile(filePath);
context.HttpApplication.CompleteRequest();

【讨论】:

  • 太糟糕了,不允许您发送二进制流。
【解决方案2】:

由于我(还)不能添加 cmets,所以这里有一个小提示。

请注意 Response.End(),因为该方法会终止线程并且在此之后不会执行任何操作。 您可能希望在 TransmitFile() 之后执行 Response.Flush() 以确保所有内容都发送到客户端。

有关 Response.End() 的更多信息,请参阅 this question

【讨论】:

    【解决方案3】:

    显然对 OP 有用有点晚了,但显然 ZIP 文件在 MIME 类型和 IIS 压缩方面存在一些问题。请参阅 SharpLibZip 上的 wiki:

    https://github.com/icsharpcode/SharpZipLib/wiki/Zip-Samples#wiki-anchorMemory

    Response.ContentType = "应用程序/zip" ' 如果浏览器接收到损坏的 zip 文件,则 IIS 压缩可能会导致此问题。一些成员发现 ' Response.ContentType = "application/octet-stream" 解决了这个问题。可能特定于 Internet Explorer。

    这可能解释了为什么您需要使用二进制/八位字节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-29
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 2013-02-10
      • 2011-10-05
      相关资源
      最近更新 更多