7

我有一个带有链接按钮的 aspx 页面,它触发 javascript 以弹出打开一个新的 aspx 页面以将文件流式传输到浏览器以供用户下载。

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

        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 中的默认操作。

但是,当我在 IE 7 中导航并单击下载时,我得到一个弹出窗口,该窗口在 1/8 秒内可见......然后消失。没有提示保存/打开。

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

文件下载的自动提示被禁用。当我检查它以启用我然后让保存/打开提示正常工作。

所以我的问题是......有没有人解决这个问题?我已经尝试了很多人们声称可以使用不同的标头标签的东西,例如缓存、编译指示等……这些都没有解决 IE 默认禁用下载属性的事实。

4

5 回答 5

2

最近,我们在自定义 Web 框架中下载生成的报告时遇到了同样的问题。研究使我们尝试了您提到的相同方法(设置 Content-Disposition)。

该问题与 IE7 和安全区域有关。默认情况下,某些操作必须由用户显式启动。您可以先查看了解和在保护模式下工作 Internet Explorer关于窗口限制

于 2009-08-13T15:46:37.390 回答
1

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

您可以尝试通过添加来强制 Internet Explorer

HttpContext.Current.ApplicationInstance.CompleteRequest();

到您的请求结束。

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

于 2009-08-26T20:27:46.910 回答
0

尝试这个

protected void Button1_Click(object sender, EventArgs e) { Response.ContentType = "application/pdf"; 响应。清除();Response.TransmitFile("test.pdf"); 响应。结束();}

于 2009-08-19T06:22:05.317 回答
0

与此问题无关,但您需要在输出中引用文件名。文件名中的空格会在下载文件时搞砸文件名。

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "." + m_format +"\"");
于 2009-08-13T16:17:49.940 回答
0

如果不需要使用 javascript 打开新页面,您可以使用 Response.Redirect() 到 aspx 页面。这应该打开保存/打开对话框。

于 2010-05-27T10:35:02.053 回答