使用NodeJs获取输出zip文件的大小

时间:2018-02-19 12:09:27

标签: node.js express download node-archiver

我正在使用NodeJs(expressJs)和archiver模块将zip文件流式传输到客户端,因此最终的ZIP文件不会存在于服务器存储(streaming zip serving)中,但是问题是我无法获得输出文件的大小,因为zip过程是实时发生的。

代码:

var archiver = require('archiver');
var files = ["file1","file2"];
var zipper = archiver('zip');

zipper.on('error', function(err) {
res.status(500).send({
    error: err.message
});
});

res.attachment('output.zip');
res.setHeader('Content-Type', 'application/zip');
zipper.pipe(res);
files.forEach(f => {
zipper.file(f, {
    name: f
});
});

zipper.finalize();

1 个答案:

答案 0 :(得分:1)

您已在可读流上侦听"data"事件。 这里的zipper是一个可读的流,所以你可以通过添加每个块的大小来计算整个大小。

var sizeOfZipFile = 0;
zipper.on('data', (chunk) => {
 sizeOfZipFile += chunk.length 
});
console.log(sizeOfZipFile) //logs the size of the zip file