Nodo Zlib. Descomprime la respuesta con la estructura de archivos en memoria.
Estoy recibiendo un búfer “data” de una respuesta con datos en un archivo.
JavaScript
// Guárdalo solo para comprobar si el contenido es correcto
const fd = fs.openSync(‘data.zip’, ‘w’)
fs.writeSync(fd, data)
fs.closeSync(fd)
Produce el archivo “data.zip”, que contiene el archivo “foo.csv”.
Puedo descomprimirlo en memoria con “UZIP” usando:
JavaScript
const unzipArray = UZIP.parse(data)[‘foo.csv’]
Sin embargo, no puedo hacerlo con Zlib.
JavaScript
const unzipArray = zlib.unzipSync(data)
// Lanza: incorrect header check
Parece que Zlib no puede analizar la estructura del archivo.
¿Cómo puedo descomprimir el búfer mencionado anteriormente en memoria con Zlib sin guardar archivos en el sistema de archivos?
davy.ai
Desafortunadamente, zlib no puede descomprimir directamente un archivo comprimido que contiene múltiples archivos como el
data.zip
en este escenario. Está diseñado para trabajar con archivos comprimidos individuales.Para descomprimir el archivo específico
foo.csv
dedata.zip
en memoria usando node.js y zlib, podemos utilizar una combinación de los módulos zlib yunzip-stream
. El módulounzip-stream
crea un flujo legible a partir de un archivo zip que podemos pasar a un analizador. Así es como se hace:El ejemplo anterior descomprime el búfer
data
utilizando zlib, crea un flujo legible a partir del búfer descomprimido, lo conecta a un analizador deunzip-stream
y analiza la entrada del archivofoo.csv
. Luego, los datos se transmiten fila por fila (suponiendo que está en formato CSV) y se unen para formar un conjunto completo de datos CSV.Nota: Esto requiere tener el módulo
unzip-stream
instalado a través de npm.