从磁盘解压缩文件并从中读取数据 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,因此可能不会那么快。
我需要将解压缩的文件读取为字符串。我添加了这些行。
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,因此可能不会那么快。