节点 - 按顺序下载zip并提取

时间:2016-09-01 15:07:32

标签: javascript node.js express npm

我正在开发一个Node Express,它会调用REST URL来下载一个zip并将其解压缩。

以下是我要遵循的步骤

  1. 使用请求模块,向REST API发送POST请求。
  2. REST API返回一个zip文件。管道将其保存到文件系统
  3. 解压缩zip文件
  4. 清理zip文件(此代码尚未存在)
  5. 这就是我的代码的样子

    return new Promise(function(resolve, reject) {
      var req = require('request');
      var extract = require('extract-zip');
      var postData = {
        username: "abc",
        password: "zyz"
      }
      var options = {
        method: 'post',
        body: postData,
        json: true,
        url: "http://localhost:8080/zipdownload"
      }
      req(options, function(err, res, body) {
        if(err) {
          console.log('Error posting json ' + err)
          return;
        }
      }).pipe(fs.createWriteStream(USER_DIR + '/MY.zip')).on('finish', function() {
        console.log('Finished downloading ZIP file');
        extract(USER_DIR + '/MY.zip', {
          dir: USER_DIR + '/MyExtractedFolder'
        }, function(err) {
          if(err) {
            console.log('Error extracting  zip ' + err);
          }
          resolve("Promised resolved donwloading and extracting zip");
        })
      }).on('error', function(error) {
        reject('Error in downloading content', error);
      });
    });
    

    我可以下载zip文件并使用.pipe将其保存在文件系统中。但是当我尝试使用extract-zip提取它时,它会给我以下错误

      

    未找到中央目录记录签名的结尾。

    我怀疑提取代码不在正确的位置,并且在提取代码仍在运行时Promise得到解决。因此,调用函数会尝试对当前不存在的提取文件执行某些操作。

    另外,我无法弄清楚我应该在哪里放置zip清理代码。它必须在提取完成后触发,而不是与提取并行。

0 个答案:

没有答案