【问题标题】:NodeJS ZIP file downloaded corruptNodeJS ZIP 文件下载损坏
【发布时间】:2018-03-20 14:47:08
【问题描述】:

我正在使用此代码在内存中生成 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 文件损坏。

【问题讨论】:

  • 请贴出用于向客户端发送文件的代码。
  • var zip = fs.createReadStream(process.env.PWD+'/'+req.params.zip, 'binary').pipe(res);
  • 这是将服务器硬盘上的正确 zip 文件发送到客户端的代码......当我得到响应成功时,在 clint 端 chrome 开始下载 zip 文件......管道。(res)读取 zip 文件来自服务器 HDD 的二进制文件并将其二进制内容发送到客户端 res -> response

标签: javascript node.js


【解决方案1】:

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

/* 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 格式打开并且大小与服务器上的原始文件匹配...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多