2015-11-05 69 views
11

我使用以下开源解压文件,并按预期在 zip中大小为2-5 MB,但是当我将zip放在10 MB以上时出现错误, 我可以用于大型zip文件的更稳定的开源代码? 我需要它在MIT许可下。 这是我根据解压的GitHub页面的这个问题用 https://github.com/EvanOxfeld/node-unzip使用12MB文件大小解压缩时出错

var extractor = unzip.Extract({ path: "../"}); 

extractor.on("close", function() { 
    console.log("Success unzip"); 
}); 

extractor.on("close", function(err) { 
    console.log(err); 
}); 

req.pipe(extractor); 
+0

我已经在大拉链上使用jszip(几十MB)。可能需要调整才能在节点上工作,但我认为有很多例子。 – dandavis

+0

你得到了什么错误? – prasun

+0

@prasun - 我得到了无效的签名......这与真正的问题无关,我猜这是文件大小...... –

回答

5

- https://github.com/EvanOxfeld/node-unzip/issues/73

  • 的解压模块不再被支持。
  • 与从HTTP流问题似乎都在一个叉称为unzip2得到解决(这也是很老的)

尝试

npm install unzip2 

还有其它zip MIT模块你可以试试:

你也可以找到这个库 - https://www.npmjs.com/package/yauzl这解释了为什么'zip'文件格式不太适合流式传输。

https://www.npmjs.com/package/yauzl#no-streaming-unzip-api

由于.zip文件格式的设计中,这是不可能的 从开始解释.zip文件来完成(例如,从一个可读 流),而不会牺牲正确性。中央目录, 是.zip文件内容的权威,位于 .zip文件的末尾,而不是开头。流媒体API需要缓冲整个.zip文件以在到达 之前解释任何内容(破坏流式接口的目的),或者依靠通过.zip穿插 的本地文件头文件。但是,本地文件标题明确指出 是规范中不可靠的中央 目录的副本,因此相信它们将违反规范。

任何提供流式解压缩API的库都必须使上述两个妥协之一为 ,这会使库不诚实或不合规(通常为后者)。此库坚持 正确性并遵守规范,因此不提供 流API。

有354个结果在NPM来“解压” - https://www.npmjs.com/search?q=unzip

无论您选择库时,请务必使用这个库提取你的内容直接出错的zip文件,先写一个程序的Node.js来自文件系统。

一旦这个工作,您将能够添加Web服务器额外的复杂性。

1

我会使用CloudConvert api他们有一个npm可以处理这个。它的示例代码可以发现in their documentation节点具体的例子是这样的

var fs = require('fs'), 
    cloudconvert = new (require('cloudconvert'))(''); // install using 'npm install cloudconvert' 

fs.createReadStream('input.format').pipe(cloudconvert.convert({ 
"input": "upload" 
}).on('error', function(err) { 
    console.error('Failed: ' + err); 
}).on('finished', function(data) { 
    console.log('Done: ' + data.message); 
    this.pipe(fs.createWriteStream('output.format')); 
}).on('downloaded', function(destination) { 
    console.log('Downloaded to: ' + destination.path); 
})); 

你需要为这个以互联网连接工作。至于MIT的许可证,显然这是一个不是独立的代码。但它的功能和可靠性将超过本地系统上的任何功能。如果这是您对MIT许可证的担心,那么它是免费的。如果您想获得MIT许可证,以便您可以对其进行编辑并对其进行操作,则可能无法正常工作。