2017-03-07 16 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

圧縮されているか、または圧縮されていますか?これらは2つの全く異なるものです。 – tadman

+0

が圧縮されています。私は違いを知らないと思う。私はちょうどgzipに変更していると言われましたが... – bwighthunter

+1

[Zip](https://en.wikipedia.org/wiki/Zip_(file_format))は、1つまたは複数のファイルとディレクトリをエンコードする非常に特定のファイル形式です。 [gzip](https://en.wikipedia.org/wiki/Gzip)は、通常、任意のデータストリームまたは単一ファイルで使用される圧縮方法です。あなたは対処しようとしているタイプを知る必要がありますが、フォーマットは全く異なります。 – tadman

答えて

0

あなたがAWS SDKのcreateReadStream methodとS3内のオブジェクトから読み込み可能なストリームを作成し、パイプ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); 
関連する問題