NodeJS ZIP文件下载损坏

我即时通讯使用此代码生成内存中的MySQL转储,然后从内存中压缩该密码的SQL文件,并将其写入硬盘,以便我可以pipe它到客户端…

/* DUMP - database */ var mysqldump = spawn('mysqldump', ['-u', 'root', '-p'+db_pass, db_name]); var mysqlzip = spawn('zip', ['--password', db_zip]); /* OUTPUT - to zip & pv */ mysqldump.stdout.pipe(mysqlzip.stdin) mysqlzip.stdout.pipe(fs.createWriteStream(process.env.PWD+'/'+results[Object.keys(results)[0]]+'-'+date+'.zip')); mysqlzip.on('close', function () { console.log('ZIP File Created!'); /* PIPE - backup zip */ var zip = fs.createReadStream(process.env.PWD+'/'+req.params.zip, 'binary').pipe(res); /* DELETE - backup zip */ zip.on('finish', function() { fs.unlink(process.env.PWD+'/'+rows[0].name+'-'+date+'.zip', function() {}); console.log('deleting zip file...'); res.end(); }); }); 

和客户端一起下载这个文件:

 $.ajax({ type: 'GET', url: '/api/backup', success: function(res){ console.log('downloading backup success'); } }); 

问题是,ZIP文件大小是1.280 KB和下载文件大小有时是10KB有时2.158KB等等..打开zip文件时,我得到的错误消息,该zip文件已损坏。

所以我定义读取ZIP文件为“二进制”,并将其pipe道到客户端的响应…但我总是压缩文件损坏。

只需从以下位置删除“二进制”

 /* PIPE - backup zip */ var zip = fs.createReadStream(process.env.PWD+'/'+req.params.zip, 'binary').pipe(res); 

成为:

 /* PIPE - backup zip */ var zip = fs.createReadStream(process.env.PWD+'/'+req.params.zip).pipe(res); 

解决问题..现在压缩文件是正确的下载…它打开罚款的zip和大小匹配服务器上的原始…