2017-08-11 5 views
0

ノードでgzippedファイルを解凍しようとしていますが、次のエラーが発生しています。ここで ノードZlibが正しくないヘッダーチェック

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 

明らかなものがありませんか?そうでない場合、どのようにエラーを投げているのかを判断することができますか?

答えて

2

ファイルがgzipされているため、zlib.Inflateの代わりにzlib.Gunzipを使用する必要があります。

はまた、ストリームは、メモリ使用量の面で非常に効率的なので、あなたが最初にローカルに.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); 
関連する問題