2
我即时通讯使用此代码在内存中生成的MySQL转储然后从内存压缩是SQL文件与密码,并将其写入到硬盘,这样我可以把它管道到客户端...ZIP的NodeJS下载文件损坏
/* 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等and..and打开压缩文件时,我得到错误信息该zip文件已损坏。
所以我定义为读取ZIP文件为'二进制',并将其管道到客户端的响应...但我总是压缩文件损坏。
请张贴用于发送文件到客户端的代码。 – 11thdimension
var zip = fs.createReadStream(process.env.PWD +'/'+ req.params.zip,'binary')。pipe(res); – John
这是将服务器硬盘上的正确zip文件发送到客户端的代码......并在clint端获得响应成功时chrome开始下载zip文件...管道(res)从服务器硬盘读取二进制文件中的zip文件并发送它二进制内容到客户端res - >响应 – John