node.js unzip modules只提取少量文件

时间:2017-03-28 11:57:31

标签: node.js unzip

我们一直在尝试各种节点解压缩模块(adm-zip,unzip,extract-zip)来解压缩一些相当大的zip文件。在几乎所有这些模块中,我们都注意到第一次成功发生了压缩。在节点服务器连续运行的情况下,如果有一个请求导致再次解压缩给定的.zip文件,我们会注意到所有上述模块只提取了一些文件,而zip中的其余文件都被遗漏了。每次节点服务器被终止并重新启动时,第一次解压缩都会正确发生,然后不会发生。这可能是什么原因? 我们已经尝试清理完成处理后提取文件的目录,因此每次后续解压缩都会转到空目录。

1 个答案:

答案 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"))
)

也许你迟到了,但对未来的其他人可能有用。