Javascript nodejs+;archiver,为什么这个zip存档下载程序不工作(存档意外结束)?
我想使用+Javascript nodejs+;archiver,为什么这个zip存档下载程序不工作(存档意外结束)?,javascript,node.js,express,zip,Javascript,Node.js,Express,Zip,我想使用+express下载多个文件。服务器应发送一个.zip文件以响应客户端的post请求。 下面的代码创建一个zip存档,发送它,向用户显示另存为对话框,并让用户打开存档。默认情况下,WinRAR打开归档文件并列出其中的文件(仅一个文件),带有!98I9ZOCR.zip:存档意外结束错误。 怎么了 服务器: var archive = archiver('zip'); archive.on('error', function(err) { res.status
express
下载多个文件。服务器应发送一个.zip
文件以响应客户端的post
请求。
下面的代码创建一个zip存档,发送它,向用户显示另存为对话框,并让用户打开存档。默认情况下,WinRAR打开归档文件并列出其中的文件(仅一个文件),带有!98I9ZOCR.zip:存档意外结束错误。
怎么了
服务器:
var archive = archiver('zip');
archive.on('error', function(err) {
res.status(500).send({error: err.message});
});
//on stream closed we can end the request
archive.on('end', function() {
console.log('Archive wrote %d bytes', archive.pointer());
});
//set the archive name
res.attachment('userarchive.zip');
//this is the streaming magic
archive.pipe(res);
for (var fi in req.body.filename) {
var _file = src + '/' + req.body.filename[fi];
archive.file(_file, { name: p.basename(_file) });
}
archive.finalize();
客户:
$http({
method: 'post',
url: to,
data: data
}).success(function(data, status, headers, config){
var file = new Blob([data], {type: 'application/zip'});
window.location = URL.createObjectURL(file);
}).error(function(data, status, headers, config){
console.log('Error');
});
我忘记设置正确的响应类型:
responseType:'arraybuffer'
您似乎需要等到最终完成。archive.finalize()方法返回一个承诺
在这里,您正在收听“on end”事件,但没有像评论所说的那样结束请求
//流上关闭我们可以结束请求
archive.on('end',function(){
console.log('Archive写入了%d个字节',Archive.pointer());
});
此外,我还发现,即使在从archive.finalize()
方法返回的承诺得到解决之后,存档者可能仍然在传输一些数据。我没有找到比在最终确定
承诺解决后等待更好的方法