在node.js

时间:2016-10-05 16:38:46

标签: node.js zip

节点有各种zip模块。一般来说,他们似乎遵循这样的模式:

// Creating a zipfile object
var zf = new zipfile.ZipFile('./test/data/world_merc.zip');

// the zipfile has a list of names:
// zf.names[0] === 'world_merc.prj'

上面的代码段已从node-zipfile自述文件https://github.com/mapbox/node-zipfile中解除,但例如AdmZip包中存在类似的示例:https://github.com/cthackers/adm-zip

所以这让我觉得很奇怪,因为看起来这两个库都假定同步代码(至少,你需要打开文件来读取标题,这是阻塞,对吧?)

所以我挖掘了AdmZip的实现,结果发现你可以将缓冲区传递给AdmZip构造函数,例如你可以这样做:

fs.readFile('./my_file.zip', function(err, buffer) {
    var zip = new AdmZip(buffer);
    var zipEntries = zip.getEntries(); 
});

但这只是稍微好一些,因为它似乎AdmZip期望我只是为了访问标题而读取整个文件。我阅读了zip规范,我的理解是列出内容的文件“中心目录文件头”无论如何都在文件的末尾。

所以这是问题的超长引导,是否存在一个节点库,它将有效地和异步地读取zip内容(例如,如果我要做的就是看,我没有在内存中实现整个zip文件在中央目录标题)?

1 个答案:

答案 0 :(得分:0)

经过多次搜索,我找到了一个合适的实现,可以有效地读取标头异步:

https://github.com/antelle/node-stream-zip