节点Zlib不正确的标头检查

时间:2017-08-11 18:24:19

标签: javascript node.js

我试图在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

我错过了一些明显的东西吗?如果没有,我如何确定错误是什么?

1 个答案:

答案 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);