我读了很多这样的问题,但我真的无法弄清楚......
我用archiver https://www.npmjs.com/package/archiver and express https://www.npmjs.com/package/expressNode.js 模块。我只想将 zip 文件发送给客户。我的代码大致如下:
res.set("Content-Type", "application/zip");
archive = archiver("zip", {store: true});
archive.pipe(res);
当请求时,zip 文件被正确传输,但 Chrome 抱怨:
资源解释为文档,但使用 MIME 类型 application/zip 进行传输
如果我做了一些愚蠢的事情,比如将内容类型设置为text/json
, I get:
资源解释为文档,但使用 MIME 类型 text/json 进行传输
显然我在 Node.js 中的设置正在完成其工作,而其他问题才是问题所在。它说该资源是使用 MIME 类型 application/zip 传输, but 解释的作为文档。
如何使其不被解释为文档?
另外,我尝试了以下设置内容类型的方法:
res.type("application/zip");
res.contentType("application/zip");
但我得到了同样的结果。
另一方面,Mozilla 并不抱怨任何事情。类似问题的一些答案表示可以忽略此警告。我也应该忽略它吗?问题可能是存档直接通过管道传输到响应对象吗?虽然(我重复一遍),zip 已发送成功地.
Edit:
Setting Content-Disposition
也不起作用:
res.set({
"Content-Type": "application/zip",
"Content-Disposition": "attachment; filename='images.zip'"
});
我也用一个<iframe>
发起请求:
document.getElementById("iframe-downloader").src = requestUrl;
原因是因为我不想要页面重定向。我能做到的唯一方法就是这样。
Edit:
如何更改我的 Chrome 设置这个答案 https://stackoverflow.com/a/19302014/3130281指出也不起作用。
Edit:
这个答案 https://stackoverflow.com/a/24118318/3130281说这是因为<iframe>
。如果我通过简单的方式提出请求<form>
with action="/archive"
,还是不行。