我们一直在尝试各种节点解压缩模块(adm-zip,unzip,extract-zip)来解压缩一些相当大的zip文件。在几乎所有这些模块中,我们都注意到第一次成功发生了压缩。在节点服务器连续运行的情况下,如果有一个请求导致再次解压缩给定的.zip文件,我们会注意到所有上述模块只提取了一些文件,而zip中的其余文件都被遗漏了。每次节点服务器被终止并重新启动时,第一次解压缩都会正确发生,然后不会发生。这可能是什么原因? 我们已经尝试清理完成处理后提取文件的目录,因此每次后续解压缩都会转到空目录。
答案 0 :(得分:2)
我有一个类似的问题,在我的情况下,根本原因是该过程在提取完成之前被终止。
关键是确保在完成提取后,只执行可导致垃圾清理的代码。就我而言,我在错误的假设下调用window.location(Electron Framework),即对解压缩模块的Extract()的调用是同步的。
以下是我的成功代码:
fs.createReadStream(fp).pipe(unzipper.Extract({ "path": dirname })
.on('finish', function() {
//Extraction done, you can do any cleanup or navigation here.
window.location = 'listing.html';
})
.on('error', () => console.log("Error"))
)
也许你迟到了,但对未来的其他人可能有用。