在Internet Explorer中,a href链接中的文件打开而不是下载

23
<a href="path/to/file/filename.xxx" download="filename.xxx">filename</a>'

当我点击链接时,应该下载我的文件名.xxx。

在 Chrome 中完美运行。但在 Internet Explorer 中,它会打开文件而不是下载。可能的问题是什么?是否有需要添加的属性使其在 ie 中工作?

并且我需要一个适用于所有浏览器的文件下载示例。


它是什么扩展名? - reyaner
1
这个特定的问题已经有答案了,可以在这里找到:https://dev59.com/iknSa4cB1Zd3GeqPR-Wy - Bruce BENAMRAN
@BruceBENAMRAN:这与用户试图使用的下载属性无关。 - Chris
@reyaner:任何扩展名都可以。我正在动态上传文件并以此格式保存它们,并像上面那样向用户显示文件。当用户单击它时,应该无论扩展名如何都能下载(就像在Chrome中一样)。 - Ebenezar John Paul
我也做了同样的事情,但它没有下载文件。https://stackoverflow.com/questions/46876439/excel-file-download-failed-in-chrome-using-php-yii2 - Moeez
8个回答

20

download属性在IE中不受支持(请参见http://caniuse.com/#search=download%20attribute)。

这意味着只有Firefox、Chrome、Opera和最新版本的Blackberry浏览器支持下载属性。

对于其他浏览器,您需要使用更传统的方法来强制下载。也就是说,必须使用服务器端代码设置适当的Content-Type和Content-Disposition标头,以告诉(或欺骗,这取决于您的观点)浏览器下载该项。标头应该是这个样子:

Content-Type: application/octet-stream
Content-Disposition: attachment;filename=\"filename.xxx\"

(感谢antyrat提供头部的复制粘贴)


添加了一条注释,但基本上意味着在服务器端执行。 - Chris

11

应该在服务器端进行修复。您的服务器应该针对这些文件类型返回以下标头:

Content-Type: application/octet-stream
Content-Disposition: attachment;filename=\"filename.xxx\"

只有当用户可以访问他所托管网站的IIS服务器时,才能应用此功能。 - AnaMaria
2
@AnaMaria 是的,但否则无法同时解决所有用户的问题... - antyrat
1
octet-stream可能太宽泛了,请尝试设置正确的头文件:http://www.iana.org/assignments/media-types/media-types.xhtml - TecHunter

2

0

这必须是HTTP头的问题。

请参见此处: 文件下载的HTTP头

服务器应该通过发送内容告诉您的浏览器下载该文件

Content-Type: application/octet-stream; 
Content-Disposition: attachment;

在头文件中


只有当用户可以访问托管其站点的 IIS 服务器时,才能应用此操作。 - AnaMaria

0

这不是代码问题,而是你的默认IE设置。

更改“始终打开”设置:

  1. 在Windows资源管理器中,单击“工具”菜单,选择“文件夹选项”
  2. 在出现的窗口中,单击“文件类型”选项卡,然后滚动列表,直到找到要更改的文件扩展名(按字母顺序排列)。例如,如果Internet Explorer总是尝试打开.zip文件,请滚动列表,直到找到“zip”的条目。
  3. 单击文件类型,然后单击“高级”按钮。
  4. 选中“下载后确认”框,然后单击“确定”>“关闭”。

编辑:如果你问我,我会在文本中添加以下内容:“Internet Explorer用户:要下载文件,“右键单击”链接,然后点击“另存为”以下载文件。”,而不是在代码中进行任何更改。

编辑2:这个解决方案对你非常完美。它是我从其他答案中拷贝的解决方案,我并不想把它当作我的。

Content-Type: application/octet-stream
Content-Disposition: attachment;filename=\"filename.xxx\"

然而,您必须确保指定允许的文件类型。您在帖子中提到您想要任何类型的文件,这将是一个问题。

例如,如果您的网站有图像,并且最终用户单击这些图像,则它们将被下载到他的计算机上,而不是在新页面中打开。明白了吗?因此,您需要指定文件扩展名。


6
然而,OP无法为所有用户进行此操作。这个修复只适用于他自己,而不是所有使用他网页的人。 - Chris
哈哈。这是我下载非法音乐时最常见的文本。 - AnaMaria
@AnaMaria 这有点让最终用户知道您的功能受到限制。我希望我的下载在所有浏览器中都得到支持。 - Ebenezar John Paul

0

众所周知,Internet Explorer 存在 HTTP 标头问题。如果您使用 Apache,请尝试编辑服务器的 .htaccess 文件并包含以下规则:

# IE: force download of .xxx files
AddType application/octect-stream .xxx
<Files *.xxx>
  ForceType application/octet-stream
  Header Set Content-Disposition attachment
</Files>

0

将您的文件压缩成 (.zip) 格式,IE 将会给用户提供打开或下载该文件的选项。


-3

你可以在HTTP头中进行配置

httpResponse.setHeader("Content-Type", "application/force-download");
        httpResponse.setHeader("Content-Disposition",
                               "attachment;filename="
                               + "MyFile.pdf"); 

您的回答没有提及此代码适用的编程语言或平台。我在JavaScript中尝试了一下,但httpResponse未定义。 - Kevin Ghadyani
然后定义它。它在头部配置。它不依赖于语言,HTTP是一种协议,伙计。它不关心编程语言或平台。 - Stimpson Cat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接