2017-03-07 8 views
0

Ich ziehe Objekte von s3 herunter. Die Objekte sind gezippt, und ich muss sie entzippen und den Inhalt mit einigen Strings vergleichen können. Mein Problem ist, dass ich sie nicht richtig entpacken kann. Dies ist was ich sehe passieren: s3 gezippt -> über den Draht -> zu mir als JS Buffer -> ???Entpacke String in JS

Ich bin nicht sicher, was ich als nächstes tun können. Ich habe scheinbar alles versucht, wie pako und lzutf8, um die Saiten zu dekomprimieren, aber keine Würfel.

hier ist ein Versuch, mit lzutf8:

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

Hier ist ein Versuch, mit pako:

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

pako eine "falsche Headerprüfsequenz" wirft, und lzutf8 leise tut nichts.

Ich bin nicht auf diese Bibliotheken verheiratet, so dass, wenn es etwas anderes ist, dass die Arbeit machen wird, ich bin glücklich, alles zu versuchen. Ich vermute, dass mein Problem etwas mit den Kodierungstypen zu tun haben könnte? Nicht sicher, obwohl. Hier

ist, was der relevante Teil meines Code wie folgt aussieht:

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

Ist es gezippt oder ist es gezippt? Das sind zwei völlig verschiedene Dinge. – tadman

+0

gezippt. Ich denke, ich kenne den Unterschied nicht. obwohl ich gerade gesagt, ändern wir es gzip ... – bwighthunter

+1

[Zip] (https://en.wikipedia.org/wiki/Zip_ (FILE_FORMAT)) ist ein sehr spezifisches Dateiformat, das eine oder mehr Dateien und Verzeichnisse kodiert . [gzip] (https://en.wikipedia.org/wiki/Gzip) ist eine Komprimierungsmethode, die normalerweise für einen beliebigen Datenstrom oder eine einzelne Datei verwendet wird. Sie müssen wissen, mit welchem ​​Typ Sie es zu tun haben, das Format ist komplett anders. – tadman

Antwort

0

Sie können mit dem AWS SDK createReadStream method und dann Rohr einen lesbaren Stream von einem Objekt in S3 schaffen, die durch eine 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); 
Verwandte Themen