正确的标题,但铬说:“资源解释为文档”

我读了很多像这样的问题,但我真的无法弄清楚…

我使用存档器和expression Node.js模块。 我想简单地发送一个zip文件到客户端。 我的代码大致如下所示:

res.set("Content-Type", "application/zip"); archive = archiver("zip", {store: true}); archive.pipe(res); 

当请求时,zip文件被正确传输,但Chrome抱怨:

资源解释为文档,但使用MIMEtypes的应用程序/ zip传输

如果我把内容types设置为text/json ,我会做一些愚蠢的事情:

资源解释为Document,但是以MIMEtypestext / json传输

所以显然,我在Node.js中设置的是做它的工作,而其他的是这个问题。 它说资源是通过MIMEtypesapplication / zip传输的 ,但是解释为Document。

我如何使它不被解释为文档?


另外,我尝试了这些设置内容types的方法:

 res.type("application/zip"); res.contentType("application/zip"); 

但是我得到了同样的结果。

另一方面,Mozilla不会抱怨任何事情。 类似的问题的一些答案说,这个警告可以被忽略。 我应该忽略它吗? 难道问题是存档是直接pipe道到响应对象? 尽pipe(我重复一遍),邮件发送成功

编辑:

设置Content-Disposition也不起作用:

 res.set({ "Content-Type": "application/zip", "Content-Disposition": "attachment; filename='images.zip'" }); 

我也使用<iframe>来发起请求:

 document.getElementById("iframe-downloader").src = requestUrl; 

原因是因为我不想要页面redirect。 我能做到的唯一方法就是这样。

编辑:

改变我的Chrome设置如何这个答案指出不工作。

编辑:

这个答案说这是因为<iframe> 。 如果我通过一个简单的<form> with action="/archive"发出请求,它仍然不起作用。

我认为这意味着Chrome浏览器试图将该文件显示为网页,而这不是您想要的。

添加标题: Content-Disposition: attachment; filename="filename.ext" Content-Disposition: attachment; filename="filename.ext"