从磁盘解压缩文件并从node.js上读取数据

时间:2015-08-06 10:26:33

标签: node.js gzip unzip fs

我需要将解压缩文件读取为字符串。我添加了这些行。

fs.readFile("report.gz", function(err, data) {
    zlib.gunzip(data, function(err, dezipped) {
      if (err) {
        console.log(err);
      } else {
        console.log('length of data = ' + data.length);
        console.log('length of dezipped =' + dezipped.length);
        console.log(dezipped.toString("utf-8"));
      }
    });
  });

结果我只有我文件的第一行(在解压缩变量中),我怎么能读取所有行?

在控制台中我看到了

length of data = 88875 (~ 85 Kb)
Length of dezipped = 528 (bytes)

我可以得出结论,解压缩是alredy cutted数据。

1 个答案:

答案 0 :(得分:2)

我不确定你的情况是否属于这种情况,但我可以通过将多个gzip块组合成一个文件(这是完全有效的AFAIK)来重现类似的东西:

$ { echo ONE | gzip; echo TWO | gzip } > output.gz
$ gzcat output.gz
ONE
TWO

zlib只会提取第一个块:

$ node app.js
length of data = 48
length of dezipped =4
ONE

我发现zlibjs会正确处理这些文件:

$ node app.js
length of data = 48
length of dezipped =8
ONE
TWO

它是替代品,所以您需要做的就是让代码工作:

var zlib = require('zlibjs');

由于它是纯粹的JS,它可能不会那么快。

相关问题