2017-03-07 291 views
0

我從s3拉下對象。對象被壓縮,我需要能夠解壓縮它們,並將內容與一些字符串進行比較。我的問題是,我似乎無法正確解壓縮它們。這是我看到發生的事情:s3壓縮 - >通過電線 - >我的JS緩衝區 - > ???在JS中解壓縮字符串

我不確定接下來可以做什麼。我似乎嘗試了所有的東西,比如pako和lzutf8來解壓琴絃,但沒有骰子。

這裏是lzutf8嘗試:

lzutf8.decompress(buffer,{outputEncoding: "String"}, (result, error) => { 
    if (err) console.log(err); 
    if (data) console.log(data); 
}); 

這裏是PAKO嘗試:

pako.ungzip(buffer,{to: "string"}, (result, error) => { 
    if (error) console.log(err); 
    if (result) console.log(data); 
}) 

PAKO拋出 「不正確頭檢查」,並lzutf8默默地什麼都不做。

我沒有與這些圖書館結婚,所以如果還有其他事情可以完成這項工作,我很樂意嘗試任何事情。我猜測我的問題可能與編碼類型有關?但不知道。

這裏是我的代碼的相關部分的樣子:

let pako = require('pako'); 
let streamBuffers = require('stream-buffers'); 


let ws = fs.createWriteStream(process.cwd() + 'path-to-file'); 
let rs = new streamBuffers.ReadableStreamBuffer(); 
objects.forEach((obj) => { 
    console.log(obj); 
    rs.on("data", (data) => { 
     ws.write(pako.ungzip); 
    }) 
    rs.push(obj); 
}) 
+0

它是壓縮還是壓縮?這是兩個完全不同的東西。壓縮了 – tadman

+0

。我想我不知道區別。儘管我剛剛被告知我們正在將其更改爲gzip ... – bwighthunter

+1

[Zip](https://en.wikipedia.org/wiki/Zip_(file_format))是一種非常具體的文件格式,可對一個或多個文件和目錄。 [gzip](https://en.wikipedia.org/wiki/Gzip)是一種壓縮方法,通常用於任意數據流或單個文件。您需要知道您要處理的是哪種類型,格式完全不同。 – tadman

回答

0

您可以從S3對象與AWS SDK的createReadStream method然後通過管道創建一個可讀的流,通過一個zlib.Gunzip transform stream

var zlib = require('zlib'); 
var s3 = new AWS.S3({apiVersion: '2006-03-01'}); 
var params = {Bucket: <bucket>, Key: <key>}; 
var file = require('fs').createWriteStream(<path/to/file>); 
s3.getObject(params).createReadStream().pipe(zlib.createGunzip()).pipe(file);