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()
方法返回的承诺得到解决之后,存档者可能仍然在传输一些数据。我没有找到比在
最终确定
承诺解决后等待更好的方法