Javascript 下载的NodeJS ZIP文件已损坏

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])

我用这段代码在内存中生成mysql转储,然后用内存中的密码压缩sql文件,并将其写入HDD,这样我就可以通过管道将其传输到客户端

            /* 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