我使用以下代码压缩整个文件夹,该文件夹仅包含.txt文件,并以.zip文件的形式发送到客户端。
var time = new Date().getTime();
var userId = parseInt(req.params.userId);
console.log("User ID: "+userId);
var output = fs.createWriteStream('user_archive/temp-'+userId+'.zip');
var arch = archiver('zip');
output.on('close', function () {
console.log(arch.pointer() + ' total bytes\n\r__');
res.header('Content-disposition', 'attachment; filename=archive-'+time+'.zip');
res.header('Content-type', 'application/octet-stream');
var filestream = fs.createReadStream('user_archive/temp-'+userId+'.zip');
filestream.pipe(res);
});
arch.on('error', function(err){
throw err;
});
arch.pipe(output);
arch.bulk([
{ expand: true, cwd: 'user_archive/temp-'+userId+'/', src: ['*.txt'], dest: 'messages-'+time}
]).finalize();
我面临的问题是,在测试此代码时,我没有收到相同数量的字节,console.log(arch.pointer() + ' total bytes\n\r__');
给出了22个字节的值,这些字节对应于错误的存档,正确的数字的字节数。另外要提一下,经过5-6次连续测试后,我收到了正确的存档,直到我停止并重新启动节点。然后再次发生:5个不正确的档案,然后是正确的档案。我的问题:为什么这种行为不明确?