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

Unzip file from disk and read data from it on node.js

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

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)

我可以断定解压缩后的数据已经被切割了。

我不确定你的情况是否属于这种情况,但我可以通过将多个 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,因此可能不会那么快。