使用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/怪癖?


当前回答

我得到了同样的错误,解决方法是把属性

target = "_ blank"

最后:

<a href="/uploads/file.*" target="_blank">Download</a>

*是要下载的文件的扩展名。

其他回答

我在通过Javascript执行文件下载时遇到了类似的问题。添加下载属性没有区别,但添加target='_blank'做了-我不再得到'资源解释为文档…控制台消息。

下面是我的简单代码:

var link = document.createElement('a');
link.target = '_blank';
link.href = url;
document.body.appendChild(link); // Required for Firefox
link.click();
link.remove(); 

我还没有尝试直接使用HTML,但希望它能工作。

注意,我发现Firefox需要将链接附加到文档中,而Chrome不需要它也可以工作。

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

我在一个ASP网站项目中遇到了这个问题。添加一个“Content-Length”头会导致下载在Chrome中重新开始工作。

我在提供PDF文件(MIME类型应用程序/ PDF)时遇到了这个问题,并通过设置Content-Disposition头来解决它,例如:

Content-Disposition: attachment; filename=foo.pdf

希望这能有所帮助。

您可以在<a>标记中指定HTML5下载属性。

<a href="http://example.com/archive.zip" download>Export</a>

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attr-download