为什么来自NodeJS服务器的ZIP文件不可读?

时间:2019-06-14 15:10:31

标签: javascript node.js zip jszip

我正在制作一个Web服务,该服务会将一些生成的zip文件返回给客户端。

当前,我为测试做了一个非常简单的代码,当我直接查询该服务时,ZIP文件会很好地返回。在不久的将来,我需要通过 header 传递一些参数,因此客户端上的简单链接将无法完成工作。

因此,我决定在客户端上使用XmlHttpRequest来查询资源并将其下载为简单文件。问题来了,当我用服务器响应生成下载文件时,zip文件不起作用。

这是NodeJS代码(带快递):

fread()

这里是客户端Java脚本,它调用服务,然后根据答案创建文件:

.get('/myservice', function(req, res)
{
    res.setHeader('Content-Type', 'application/zip');
    const JSZip = require('jszip');

    const zip = new JSZip();
    zip.file('hello.txt', 'Hello world\n');
    zip
        .generateAsync({type: 'nodebuffer'})
        .then(function(content)
        {
            res.send(content)
        }.bind(res));
}

我认为我完全想念客户端上的编码,但是没有找到解决方案。

下载的文件解压缩后,会给我一个文件,其中包含相同的zip文件,也可以执行相同的操作。

当我使用XmlHttpRequest调用服务时,它被很好地调用并且不会引发任何错误。

我正在使用 JSZip 生成邮政编码。 我精确地说,我不能在JSZip的 generateAsync 上使用 blob ,因为那样会给我带来错误。

任何解决方案吗?

1 个答案:

答案 0 :(得分:0)

您不需要使其变得如此复杂。当您已经在传送文件时。只需使用window.open('/myservice');,浏览器就会处理它的事实,并保持当前页面打开并下载文件。

https://codesandbox.io/s/hardcore-euclid-9nkft