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

时间:2017-06-16 14:55:19

标签: javascript node.js google-chrome express node-archiver

我读了很多类似这样的问题,但我真的无法理解......

我使用archiverexpress Node.js模块。我想简单地将zip文件发送给客户端。我的代码大致如下:

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

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

  

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

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

  

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

显然我在Node.js中设置的是正在完成其工作而其他问题就在于此。它说资源是使用MIME类型applicationatioin / zip 传输,但是解释作为文档。

如何将其解读为文档?

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

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

但我得到了同样的结果。

另一方面,Mozilla并没有抱怨任何事情。类似问题的一些答案说这个警告可以忽略不计。我也应该忽略它吗?问题可能是存档直接连接到响应对象吗?虽然(我再说一遍),拉链成功发送

编辑:

设置Content-Disposition也不起作用:

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

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

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

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

编辑:

更改我的Chrome设置this answer指出的方式也不起作用。

编辑:

This answer说这是因为<iframe>。如果我通过简单的<form> action="/archive"发出请求,则仍然无效。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

最好, 扬