节点 Zlib 不正确的标头检查

Mik*_*keV 4 javascript node.js

我正在尝试在 Node 中解压缩一个 gzipped 文件,但遇到以下错误。

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
Run Code Online (Sandbox Code Playgroud)

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

rob*_*lep 5

该文件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'));
Run Code Online (Sandbox Code Playgroud)

否则,您可以修改现有代码:

var gunzip = zlib.createGunzip();
readstream.pipe(gunzip).pipe(writestream);
Run Code Online (Sandbox Code Playgroud)