我的用例是这样的,我必须创建一个文件目录并将其作为zip文件返回给用户。
我的代码如下所示:
var output = fs.createWriteStream('target.zip');
archive.pipe(output);
archive.append('details.json', { name: 'details.json'});
archive.finalize();
//Specifiy the .zip folder & Download
filename = 'target.zip';
res.download(filename);
这为我在浏览器的下载位置提供了一个空文件夹。
然而,其服务器位置中的target.zip
包含数据。
我意识到这种情况正在发生,因为Node没有等待append()
将文件附加到存档。
我试图将代码下载到append.finalize()
的回调函数中,但它不起作用。
我在哪里放下载代码,以便在追加成功后发生?
答案 0 :(得分:4)
只需查看他们的GitHub存储库中的Example即可。
您可以在Attachment
上设置res
属性,然后传递给它。
//set the archive name
res.attachment('archive-name.zip');
//this is the streaming magic
archive.pipe(res);
您还必须监控关闭'关闭'一切都完成后能够结束流。
res.on('close', function() {
console.log('Archive wrote %d bytes', archive.pointer());
return res.status(200).send('OK').end();
});
这样你仍然可以完成,但只有在一切都完成后才会进行下载。