IE 7错误下载文件时提示保存/打开-c#asp.net 3.5

IE 7错误下载文件时提示保存/打开-c#asp.net 3.5,c#,internet-explorer-7,asp.net-3.5,content-disposition,C#,Internet Explorer 7,Asp.net 3.5,Content Disposition,我有一个带有链接按钮的aspx页面,启动javascript打开一个新的aspx页面,将文件流式传输到浏览器,供用户下载 在XP SP3、IE 7和FireFox 3.5上开发和单元测试时,使用以下代码(键是内容处置标签中的“附件”部分),两者都会提示一个对话框,询问我是否要保存或打开文档,这正是我想要的: private void WriteFileToBrowser(Byte[] requestFile, string filename, String m_mimeType,

我有一个带有链接按钮的aspx页面,启动javascript打开一个新的aspx页面,将文件流式传输到浏览器,供用户下载

在XP SP3、IE 7和FireFox 3.5上开发和单元测试时,使用以下代码(键是内容处置标签中的“附件”部分),两者都会提示一个对话框,询问我是否要保存或打开文档,这正是我想要的:

        private void WriteFileToBrowser(Byte[] requestFile, string filename, String m_mimeType, String m_format)
    {
        Response.Clear();
        Response.AddHeader("Content-Disposition", "attachment;filename=" + filename + "." + m_format);
        Response.ContentType = m_mimeType;
        Response.BinaryWrite(requestFile);
        Response.Flush();

    }
当我将其部署到Windows 2003服务器并导航到同一个aspx页面时,FireFox 3.5会正确地请求保存/打开选项,因为这是FF中的默认操作

然而,当我在IE7中导航并单击下载时,我会看到一个弹出窗口,在顶部1/8秒内可见,然后消失。没有保存/打开的提示

如果我进入IE 7->工具->互联网选项->安全->自定义级别->下载

已禁用文件下载的自动提示。当我选中它以启用时,我会得到保存/打开提示以正确工作


所以我的问题是…有人找到了解决这个问题的方法吗?我尝试过很多人们声称可以使用不同头标签的东西,比如cache、pragma等等。所有这些都不能回避IE默认禁用下载属性的事实

最近,我们在自定义web框架中下载生成的报告时遇到了相同的问题。通过研究,我们尝试了与您提到的相同的方法(设置内容配置)


这个问题与IE7和安全区有关。默认情况下,某些操作必须由用户显式启动。您可以先查看与此问题无关的和

,但需要在输出中引用文件名。下载文件时,文件名中的空格将使文件名出错

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "." + m_format +"\"");
试试这个

受保护的无效按钮1\u单击(对象发送者,事件参数e) { Response.ContentType=“application/pdf”; Response.Clear(); 响应。传输文件(“test.pdf”); Response.End();
}

如果您将页面添加到受信任的站点,则可以下载该文件。 在开发您正在运行的所有站点时,都在该区域中

您可以尝试通过添加

HttpContext.Current.ApplicationInstance.CompleteRequest();
直到你的请求结束


否则,您可以尝试将链接发布到文档,以便浏览器将请求视为用户交互的响应。

如果不需要使用javascript打开新页面,则可以使用response.Redirect()将其发送到aspx页面。这应该会打开“保存/打开”对话框。

我也尝试过类似的方法,在IE7,8中也可以使用。你能提供你使用的m_mimeType的确切值吗?在测试im时,在参数列表“application/pdf”、“pdf”中使用它作为mime和格式,你是否尝试过其他方法,例如application/zip IE7无法在其窗口中显示的东西。还没有。我调用了一个WCF方法来检索字节,该系统目前只存储PDF,他们告诉我,他们的软件目前无法转换任何其他文件类型。微软提供IE7、IE6和IE8虚拟机;您可以看到更改发生的位置。如果您在我的示例中看到,该文件不是来自文件系统,而是一个字节数组,我使用BinaryWrite()将其写入浏览器。TransmitFile()在这种情况下不起作用,除非我在系统上以物理方式组装文件。