Узел - скачать ZIP и распаковать последовательно

Я работаю над Node Express, который будет вызывать REST URL, чтобы загрузить zip и распаковать его.

Ниже приведены шаги, которые я выполняю

  1. Используя модуль запроса, отправьте запрос POST в REST API.
  2. REST API возвращает zip-файл. Передайте его, чтобы сохранить в файловой системе
  3. Распакуйте zip-файл
  4. Очистите zip-файл (этого кода еще нет)

Вот так выглядит мой код

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 разрешается, пока код извлечения еще выполняется. В результате вызывающая функция пытается что-то сделать с извлеченными файлами, которых в данный момент не существует.

Кроме того, я не могу разобрать, куда я должен поместить код для очистки почтового индекса. Он должен запускаться после извлечения, а не параллельно с извлечением.

0 ответов

Другие вопросы по тегам