我需要将解压缩文件读取为字符串。我添加了这些行。
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数据。
答案 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,它可能不会那么快。