0

我正在从 s3 拉下对象。对象被压缩,我需要能够解压缩它们并将内容与一些字符串进行比较。我的问题是我似乎无法正确解压缩它们。这就是我所看到的情况:s3 zipped -> over the wire -> 对我来说是 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);
})
4

1 回答 1

0

createReadStream您可以使用 AWS 开发工具包的方法从 S3 中的对象创建可读流,然后通过zlib.Gunzip转换流进行管道传输:

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);
于 2017-04-02T01:01:42.110 回答