我使用Node.JS
从我的S3
存储桶中获取文件。
那里的文件有gzipped
(gz
)。
我知道每个文件的内容都是由行组成的,其中每一行都是某些记录的JSON
,无法放在Kinesis
上。
每个文件包含~12K这样的记录。我希望能够在下载文件时处理记录。
如果文件不是 gzipped
,则可以使用streams
和readline
模块轻松完成。
所以,阻止我这样做的唯一因素是gunzip
进程,据我所知,需要在整个文件上执行。
gunzipping
部分文件有什么方法吗?
感谢。
尝试@Mark Adler建议:
const fileStream = s3.getObject(params).createReadStream();
const lineReader = readline.createInterface({input: fileStream});
lineReader.on('line', line => {
const gunzipped = zlib.gunzipSync(line);
console.log(gunzipped);
})
我收到以下错误:
错误:标头检查不正确 在Zlib._handle.onerror(zlib.js:363:17)
答案 0 :(得分:1)
是。 node.js有一个complete interface to zlib,允许你根据需要一次解压缩一个gzip文件。
答案 1 :(得分:0)
以下代码解决了上述代码中的问题:
const fileStream = s3.getObject(params).createReadStream().pipe(zlib.createGunzip());
const lineReader = readline.createInterface({input: fileStream});
lineReader.on('line', gunzippedLine => {
console.log(gunzippedLine);
})