2017-03-07 119 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);