节点:res.download下载空的压缩文件夹

时间:2015-12-02 16:50:36

标签: javascript node.js asynchronous synchronization archive

我的用例是这样的,我必须创建一个文件目录并将其作为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()的回调函数中,但它不起作用。

我在哪里放下载代码,以便在追加成功后发生?

1 个答案:

答案 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();
  });

这样你仍然可以完成,但只有在一切都完成后才会进行下载。