Узел - скачать ZIP и распаковать последовательно
Я работаю над Node Express, который будет вызывать REST URL, чтобы загрузить zip и распаковать его.
Ниже приведены шаги, которые я выполняю
- Используя модуль запроса, отправьте запрос POST в REST API.
- REST API возвращает zip-файл. Передайте его, чтобы сохранить в файловой системе
- Распакуйте zip-файл
- Очистите 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 разрешается, пока код извлечения еще выполняется. В результате вызывающая функция пытается что-то сделать с извлеченными файлами, которых в данный момент не существует.
Кроме того, я не могу разобрать, куда я должен поместить код для очистки почтового индекса. Он должен запускаться после извлечения, а не параллельно с извлечением.