5

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

我使用归档器表达Node.js 模块。我想简单地向客户端发送一个 zip 文件。我的代码大致如下:

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

收到请求后,zip 文件会正确传输,但 Chrome 会抱怨:

资源被解释为 Document 但使用 MIME 类型 application/zip 传输

如果我做一些愚蠢的事情,比如将内容类型设置为text/json,我会得到:

资源解释为 Document,但使用 MIME 类型 text/json 传输

所以很明显,我在 Node.js 中设置的是做它的工作,而其他的事情就是问题所在。它说资源是使用 MIME 类型 applicatioin/zip 传输的,但被解释为 Document。

如何使它不解释为文档?


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

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

但我得到了同样的结果。

另一方面,Mozilla 不会抱怨任何事情。对类似问题的一些答案表示可以忽略此警告。我也应该忽略它吗?问题可能是存档直接通过管道传输到响应对象吗?虽然(我重复一遍),但 zip 已成功发送。

编辑:

设置Content-Disposition也不起作用:

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

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

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

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

编辑:

更改我的 Chrome 设置这个答案指出的方式也不起作用。

编辑:

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

4

2 回答 2

2

我认为这意味着 Chrome 正在尝试将文件显示为网页,这不是您想要的。

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

于 2017-06-16T14:58:02.747 回答
0

我遇到了同样的问题;我有一个基于公式的发布请求,导致了一个文件。设置 MIME Type 和 Content-Disposition 会产生非常警告。我在某处读到,新文件应该在新选项卡中打开并且警告消失了。(但也可能是因为新页面立即打开和关闭......所以我无法验证该警告是否出现在那里)

最好的,一月

于 2019-12-09T18:04:18.950 回答