我正在制作一个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 ,因为那样会给我带来错误。
任何解决方案吗?
答案 0 :(得分:0)
您不需要使其变得如此复杂。当您已经在传送文件时。只需使用window.open('/myservice');
,浏览器就会处理它的事实,并保持当前页面打开并下载文件。