Javascript 下载的NodeJS ZIP文件已损坏
我用这段代码在内存中生成mysql转储,然后用内存中的密码压缩sql文件,并将其写入HDD,这样我就可以通过管道将其传输到客户端Javascript 下载的NodeJS ZIP文件已损坏,javascript,node.js,Javascript,Node.js,我用这段代码在内存中生成mysql转储,然后用内存中的密码压缩sql文件,并将其写入HDD,这样我就可以通过管道将其传输到客户端 /* DUMP - database */ var mysqldump = spawn('mysqldump', ['-u', 'root', '-p'+db_pass, db_name]); var mysqlzip = spawn('zip', ['--password', db_zip])
/* 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文件读取为“二进制文件”,并通过管道将其发送到客户端响应…但我总是发现ZIP文件已损坏。仅从以下文件中删除“二进制文件”:
/* 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文件已正确下载…它在zip中打开良好,大小与服务器上的原始文件匹配…请发布用于将文件发送到client.var zip=fs.createReadStream(process.env.PWD+'/'+req.params.zip,'binary').pipe(res)的代码;这是将服务器硬盘上正确的zip文件发送到客户端的代码…在客户端,当我获得响应成功时,chrome开始下载zip文件…pipe.(res)从服务器硬盘读取二进制zip文件,并将其二进制内容发送到客户端res->response