我正在开发一个Node Express,它会调用REST URL来下载一个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得到解决。因此,调用函数会尝试对当前不存在的提取文件执行某些操作。
另外,我无法弄清楚我应该在哪里放置zip清理代码。它必须在提取完成后触发,而不是与提取并行。