Получите размер выходного почтового файла, используя NodeJs

Я использую NodeJs (экспресс) и 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 ответ

Вы должны слушать "data" событие в читаемом потоке. Здесь zipper - читаемый поток, поэтому вы можете рассчитать весь размер, добавив размер каждого куска.

var sizeOfZipFile = 0;
zipper.on('data', (chunk) => {
 sizeOfZipFile += chunk.length 
});
console.log(sizeOfZipFile) //logs the size of the zip file
Другие вопросы по тегам