ASP.NET 中 IE 7,8 中“另存为”对话框的问题

Posted

技术标签:

【中文标题】ASP.NET 中 IE 7,8 中“另存为”对话框的问题【英文标题】:Problem with Save As dialog in IE 7,8 in ASP.NET 【发布时间】:2010-07-25 09:16:05 【问题描述】:

我正在尝试编写代码来下载位于服务器上的文件。 但在 IE 中无法打开另存为对话框。

我试过 response.redirect,我试过了

 Response.Clear();
 Response.ContentType = "text/csv"; 
 Response.AddHeader("Content-Disposition", "attachment; filename=" + fileNameDisplay); 
 Response.WriteFile(Server.MapPath(pathName + fileNameUnique)); 
 Response.Flush(); 
 Response.End(); 

一切都适用于 firefox 和 chrome ,但不适用于 Internet Explorer。 我知道在安全 ---> 自定义级别 ---> 下载 ---> 自动提示文件下载中有一个安全选项,它始终处于禁用模式,我需要将其切换为启用才能使用工作,但我不会让我的用户处理这个问题。 我如何克服这个“安全问题”?

是否有任何正确的方法来处理下载文件? 什么是正确的代码?

谢谢你, 加迪姆

【问题讨论】:

在 IE 6,7,8 中都不起作用吗? 【参考方案1】:
var info = new FileInfo(path);

Response.Clear();

Response.AppendHeader("Content-Disposition", String.Concat("attachment; filename=", info.Name));
Response.AppendHeader("Content-Length", info.Length.ToString(System.Globalization.CultureInfo.InvariantCulture));
Response.AppendHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "text/csv";

Response.WriteFile(info.FullName, true);
Response.End();

【讨论】:

感谢您的回答。但它仍然不起作用。它没有给我任何错误。只是不会打开。是因为我需要向服务器添加一些定义吗? (mime 类型、文件夹选项等)?请帮忙。谢谢,gadym。 @gadym:是否需要配置额外的 MIME 类型值得怀疑。没有错误?没有弹窗?您是否尝试过在另一个安全偏好设置的环境中运行它? 是的。在我的本地机器上它工作正常。但是当我将代码上传到服务器时,它会导致问题。没有弹出窗口,也没有发生错误。只有当我将链接添加到信任站点时,它才会起作用。但是人们如何在不涉及安全防护措施的情况下从网站下载文件呢? @gadym:恐怕您需要以某种方式配置 IE 安全首选项以允许下载内容等。 你说我需要通过代码配置客户端的浏览器?我认为这是不合法的。【参考方案2】:

你需要明确告诉它不是打开的内容, 添加以下标题:

Response.AppendHeader("Content-Disposition", "attachment; filename=" + fname);
Response.AppendHeader("Content-Transfer-Encoding", "binary");

另外强烈建议设置明确的文件长度

Response.AppendHeader("Content-Length", responseContentLength.ToString());

【讨论】:

【参考方案3】:

abatishchev,谢谢你帮助我。 我找到了解决问题的方法。

我创建了一个对话框窗口(我们称之为“DownloadWindow”),其中包含一个空的“A HREF”标签。 (它的节目 - '点击这里下载')

单击默认页面上的下载(EXCEL/CSV 图标)按钮后(创建我的文件) 动态), 我加载对话框窗口(“DownloadWindow”),然后将“a href”链接替换为我之前创建的文件 url,以便我的用户可以从我的服务器下载它。

现在,Internet Explorer 确实弹出了打开/保存/取消对话框。

这有点烦人,但它解决了我的问题。

【讨论】:

【参考方案4】:

当我使用以下文件下载链接时遇到了同样的问题:

<a href="DownloadFile.aspx">
    <input type="image" src="~/virtual/path/to/image.png" runat="server" />
</a>

当我将其更改为时,问题就消失了:

<a href="DownloadFile.aspx">
    <img src="~/virtual/path/to/image.png" runat="server" />
</a>

【讨论】:

以上是关于ASP.NET 中 IE 7,8 中“另存为”对话框的问题的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法通过注册 mime 类型来避免 ie9 中的“打开另存为”对话框?

通过显示“另存为对话”导出文件

如何在 asp.net 中的另存为文件功能中结合警报弹出窗口?

asp.net 另存为 PDF文件

程序中的对话框应用- ”另存为“对话框

不考虑另存为文件类型的另存为通用文件对话框