Estoy tratando de procesar un archivo grande (pocos GB) con el siguiente código, pero solo genera la primera línea del archivo sin comprimir.
const instream = fs.createReadStream('logs.gz'); const unzip = zlib.createGunzip(); const outstream = process.stdout; instream.pipe(unzip).pipe(outstream); // <first line of file>>No comprimí el archivo, pero según la documentación de la API del proveedor de registro, debería estar comprimido.
Si lo descomprimo manualmente usando 7zip, se descomprime bien. Si luego lo comprimo nuevamente con 7zip, el código funciona como se esperaba en este archivo procesado con 7zip.
Si me engancho por error | finish | evento de data del flujo de unzip , sin errores, los datos imprimen una línea y luego el final. ¿Alguna pista de lo que podría estar mal?
createUnzip también.
Nodo 5.5.0 en Win10, mismo comportamiento en el nodo MacOSX v5.6.0.
Está relacionado con la versión de Node que está utilizando: antes de Node v5.9.0, zlib no manejaba correctamente los archivos que contenían varios bloques comprimidos con gzip. Con esos archivos, solo se descomprimiría el primer bloque.
Para replicar este problema, utilicé lo siguiente para crear un archivo que contiene varios bloques:
$ echo foo | gzip > logs.gz $ echo bar | gzip >> logs.gzSupongo que su archivo de registro se creó de manera similar, donde cada línea de registro se comprime por separado y se agrega al archivo de registro comprimido.
Probablemente, la única solución razonable sería actualizar al menos a v5.9.0 (o incluso a v6).