2017-07-25 32 views
0

我正在使用節點https/http模塊來下載文件。代碼如下所示:節點https從url獲取文件並解壓縮

https.get(url) 
.on('response', (response) => { 
    response.pipe(fs.createWriteStream(dataDir + filename)) 
} 

在我使用unzip模塊解壓縮文件中的下一個步驟。

fs.createReadStream(dataDir + filename) 
.pipe(unzip.Extract({path: dataDir})) 
.on('close',() => { something } 
.on('error',() => { catch error} 

對於大多數情況下,一切正常。但是,有時解壓縮模塊返回此錯誤:

Error: invalid signature: 0x6d74683c 

我可以注意到的唯一問題是文件名。我從url抓取文件名。這是一個url的最後一個參數。但是,在某些情況下,確切的文件名與url中顯示的文件名不同。例如:

https://github.com/request/request/archive/master.zip 

在URL中顯示的名稱是master.zip,但是當我下載它的名字是request-master.zip

這是實際的問題嗎?如果是這樣,我該如何解決它?

回答

0

文件名最有可能是一個症狀,而不是根本原因。 unzip模塊沒有維護,有許多未解決的問題。無論如何,這很可能會被指責並且不應該被使用。

改爲使用decompressyauzl。另外,由於您試圖在流中提取歸檔文件,因此您可能需要閱讀關於如何操作not truly possible

+0

謝謝你的迴應。我會先嚐試yauzl。 – zhangjinzhou