使用Chrome 12.0.742.112,如果我重定向以下头:

HTTP/1.1 302 Found 
Location: http://0.0.0.0:3000/files/download.zip
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
X-Ua-Compatible: IE=Edge
X-Runtime: 0.157964
Content-Length: 0
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
Date: Tue, 05 Jul 2011 18:42:25 GMT
Connection: Keep-Alive

如果遵循,将返回以下头文件:

HTTP/1.1 200 OK 
Last-Modified: Tue, 05 Jul 2011 18:18:30 GMT
Content-Type: application/zip
Content-Length: 150014
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
Date: Tue, 05 Jul 2011 18:44:47 GMT
Connection: Keep-Alive

Chrome不会重定向,也不会改变前一页,它只会在控制台中报告以下警告:

资源解释为文档,但使用MIME类型application/zip传输。

这个过程在Firefox中正常工作,如果我打开一个新选项卡并直接访问http://0.0.0.0:3000/files/download.zip,在Chrome中也可以正常工作。是我做错了什么,还是这是Chrome的bug/怪癖?


当前回答

我创建的下载管理器也遇到了同样的问题。我遇到的问题是文件名太长,扩展名被剪掉了。

例子: 文件名称:组织协议和其他重要的事情

<?php
  header("Content-Disposition: attachment; filename=$File_Name");
?>

解决方法:将MySQL数据库字段增加到255来存储文件名,并在保存blob之前进行长度检查。如果长度为> 255,则将其修剪为250并添加文件扩展名。

其他回答

经过一对夫妇的csv文件下载(大量的测试)chrome询问是否允许更多的下载从这个页面。我刚刚取消了窗户。之后,chrome浏览器没有下载文件,但控制台说:

"资源解释为文档,但以MIME类型text/csv传输"

我可以通过重新启动chrome来解决这个问题(完全Ctrl-Shift-Q)。

[更新]不知道为什么这篇文章被删除了,但它为我提供了解决方案。我早些时候收到了关于尝试下载多个文件的消息,肯定是回答“不”。直到重启浏览器,我才看到“资源已解释”消息;然后它完美地工作了。在某些情况下,这可能是正确的答案。

在请求头中,您发送了Content-Type: text/html,这意味着您希望将响应解释为html。现在即使服务器发送PDF文件给你,你的浏览器也会将其理解为HTML。这就是问题所在。我正在寻找可能的原因。:)

我通过在链接中添加target="_blank"来解决这个问题。 有了这个,chrome打开一个新标签和加载PDF没有警告,甚至在响应模式。

我已经解决了这个问题…通过简单地打开一个新标签。

为什么它不能工作,我不完全确定,但这可能与Chrome如何处理一个页面上的多次下载有关,也许它认为他们是垃圾邮件,只是忽略了他们。

当我在iframe中分配src="image_url"时,我遇到了这个问题。 iframe似乎将其解释为文档,但事实并非如此。这就是为什么它会显示警告。