gunzip partials从读取流中读取

时间:2016-07-16 16:31:41

标签: node.js amazon-web-services amazon-s3 stream gzip

我使用Node.JS从我的S3存储桶中获取文件。 那里的文件有gzippedgz)。

我知道每个文件的内容都是由行组成的,其中每一行都是某些记录的JSON,无法放在Kinesis上。

每个文件包含~12K这样的记录。我希望能够在下载文件时处理记录。

如果文件不是 gzipped,则可以使用streamsreadline模块轻松完成。 所以,阻止我这样做的唯一因素是gunzip进程,据我所知,需要在整个文件上执行。

gunzipping部分文件有什么方法吗?

感谢。

编辑1 :(不好的例子)

尝试@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)

2 个答案:

答案 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);
  })