С api/zlib на възела получавам errno: -3, код: 'Z_DATA_ERROR'

Примерните данни могат да бъдат намерени тук allCountries.zip, това е формулярът на базата данни с пощенски код geonames.org.

Пускам този код,

const zlib = require('zlib');
const fs = require('fs');
const zip = fs.readFileSync('/tmp/allCountries.zip');

zlib.gunzip(zip, unzipData => console.log(unzipData) );

Получавам тази грешка,

{ Error: incorrect header check
    at Zlib._handle.onerror (zlib.js:356:17) errno: -3, code: 'Z_DATA_ERROR' }

Опитах също zlib.unzip, което връща същата грешка, и zlib.unzipSync като това,

zlib.unzip(zip, unzipData => console.log(unzipData) );

който връща този дъмп на стека,

zlib.js:536
      throw error;
      ^

Error: incorrect header check
    at Zlib._handle.onerror (zlib.js:356:17)
    at Unzip.Zlib._processChunk (zlib.js:526:30)
    at Object.<anonymous> (/tmp/test.js:6:6)
    at Module._compile (module.js:574:32)
    at Object.Module._extensions..js (module.js:583:10)
    at Module.load (module.js:491:32)
    at tryModuleLoad (module.js:450:12)
    at Function.Module._load (module.js:442:3)
    at Module.runMain (module.js:608:10)
    at run (bootstrap_node.js:382:7)

Използвам v7.0.0-test2016100609987d242b, но потвърдих, че това е същият резултат с v6.7.0. Този архив се извлича правилно с gunzip -c и unzip.

$ unzip -v ./allCountries.zip 
Archive:  ./allCountries.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
96309121  Defl:N 12668483  87% 2016-10-10 03:05 0666ed3f  allCountries.txt
--------          -------  ---                            -------
96309121         12668483  87%                            1 file

person Evan Carroll    schedule 10.10.2016    source източник


Отговори (1)


Това е zip файл, а не gzip или zlib поток. (Вижте този отговор.) zlib не обработва zip файлове. Ще трябва да намерите или да напишете код, който анализира формата на zip файла.

person Mark Adler    schedule 10.10.2016