我试图在Node中解压缩一个gzip压缩文件,但是我遇到了以下错误。
Error: incorrect header check
at Zlib._handle.onerror (zlib.js:370:17)
以下是导致问题的代码。
'use strict'
const fs = require('fs');
const request = require('request');
const zlib = require('zlib');
const path = require('path');
var req = request('https://wiki.mozilla.org/images/f/ff/Example.json.gz').pipe(fs.createWriteStream('example.json.gz'));
req.on('finish', function() {
var readstream = fs.createReadStream(path.join(__dirname, 'example.json.gz'));
var writestream = fs.createWriteStream('example.json');
var inflate = zlib.createInflate();
readstream.pipe(inflate).pipe(writestream);
});
//Note using file system because files will eventually be much larger
我错过了一些明显的东西吗?如果没有,我如何确定错误是什么?
答案 0 :(得分:4)
该文件是gzip压缩文件,因此您需要使用zlib.Gunzip
而不是zlib.Inflate
。
此外,流在内存使用方面非常有效,因此如果您想在不首先在本地存储.gz文件的情况下执行检索,您可以使用以下内容:
request('https://wiki.mozilla.org/images/f/ff/Example.json.gz')
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('example.json'));
否则,您可以修改现有代码:
var gunzip = zlib.createGunzip();
readstream.pipe(gunzip).pipe(writestream);