我正在努力完成一项非常简单的任务,但我有点困惑,并坚持在nodejs中使用zlib。我正在构建功能,包括我从aws S3下载文件gziped,解压缩并逐行读取。我想用流完成所有这些,因为我相信它可以在nodejs中完成。
这是我目前的代码库:
//downloading zipped file from aws s3:
//params are configured correctly to access my aws s3 bucket and file
s3.getObject(params, function(err, data) {
if (err) {
console.log(err);
} else {
//trying to unzip received stream:
//data.Body is a buffer from s3
zlib.gunzip(data.Body, function(err, unzippedStream) {
if (err) {
console.log(err);
} else {
//reading line by line unzziped stream:
var lineReader = readline.createInterface({
input: unzippedStream
});
lineReader.on('line', function(lines) {
console.log(lines);
});
}
});
}
});
我收到错误说:
readline.js:113
input.on('data', ondata);
^
TypeError: input.on is not a function
我认为问题可能在解压缩过程中,但我不太确定有什么问题,任何帮助都会受到赞赏。
答案 0 :(得分:6)
我没有要测试的S3帐户,但是reading the docs表示s3.getObject()
可以返回一个流,在这种情况下我认为这可能会有效:
var lineReader = readline.createInterface({
input: s3.getObject(params).pipe(zlib.createGunzip())
});
lineReader.on('line', function(lines) {
console.log(lines);
});
编辑:看起来API可能已更改,现在您需要instantiate a stream object manually才能通过其他任何方式进行管道传输:
s3.getObject(params).createReadStream().pipe(...)