2015-11-05 67 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許可證,以便您可以對其進行編輯並對其進行操作,則可能無法正常工作。