Trabajo con archivos ZIP en Node.js: guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con archivos ZIP en Node.js: bibliotecas adm-zip y archiver



En el desarrollo web moderno con Node.js, a menudo surge la necesidad de trabajar con archivos: empaquetar registros, transferir archivos en grupos, descomprimir datos cargados por el usuario. En este material, analizaremos dos bibliotecas principales para trabajar con el formato ZIP: adm-zip y archiver. Resuelven prácticamente todas las tareas relacionadas con la compresión y son excelentes tanto para scripts simples como para aplicaciones de producción.



Biblioteca adm-zip: herramienta universal para leer y escribir ZIP



adm-zip es una implementación puramente en JavaScript para trabajar con archivos ZIP sin dependencias externas. Permite tanto crear nuevos archivos como leer/modificar los existentes. La biblioteca es fácil de usar y no requiere la instalación de utilidades adicionales del sistema.



Instalación

npm install adm-zip


Creación de un archivo ZIP

const AdmZip = require('adm-zip');const fs = require('fs');

// Creamos una nueva instancia del archivoconst zip = new AdmZip();

// Agregamos archivos desde un buffer o cadenazip.addFile('hello.txt', Buffer.from('¡Hola, Mundo!', 'utf8'));

// Agregamos un archivo localzip.addLocalFile('/ruta/a/imagen.png');

// Agregamos una carpeta completazip.addLocalFolder('/ruta/a/documentos', 'docs');

// Escribimos el archivo en el discozip.writeZip('./salida/archivo.zip');

console.log('¡Archivo creado exitosamente!');


Lectura y descompresión de un archivo existente

const AdmZip = require('adm-zip');

// Cargamos un archivo existenteconst zip = new AdmZip('./entrada/archivo.zip');

// Obtenemos la lista de archivosconst zipEntries = zip.getEntries();zipEntries.forEach((entry) => { console.log(`Archivo: ${entry.entryName}, tamaño: ${entry.header.size} bytes`);});

// Extraemos todos los archivos a una carpeta especificadazip.extractAllTo('./extraido', true); // true — sobrescribir archivos existentes

// O obtenemos el contenido de un archivo específicoconst content = zip.readAsText('data.json');console.log('Contenido de data.json:', content);


Trabajo con buffers (sin escribir en disco)

const AdmZip = require('adm-zip');const zip = new AdmZip();

zip.addFile('reporte.csv', 'id,nombre,edad1,Juan,30');

// Obtenemos el archivo como Buffer para enviarlo a través de HTTPconst archiveBuffer = zip.toBuffer();

// Ahora archiveBuffer se puede enviar como respuesta del servidor// o pasarlo a otra función


Biblioteca archiver: compresión avanzada por flujos



archiver es una biblioteca más potente, optimizada para trabajar con grandes volúmenes de datos. Utiliza flujos (streams) de Node.js, lo que permite comprimir archivos «sobre la marcha» sin cargar todo el contenido en memoria. Es la elección ideal para aplicaciones de servidor con recursos limitados.



Instalación

npm install archiver


Creación de un archivo con salida por flujo

const archiver = require('archiver');const fs = require('fs');const path = require('path');

// Creamos un flujo de escrituraconst output = fs.createWriteStream('./backup.zip');const archive = archiver('zip', { zlib: { level: 9 } // Máximo nivel de compresión});

// Manejo de eventosoutput.on('close', () => { console.log(`Archivo creado: ${archive.pointer()} bytes`);});

archive.on('error', (err) => { throw err;});

// Conectamos el flujo del archivo al archivo de salidaarchive.pipe(output);

// Agregamos archivosarchive.file('/var/log/app.log', { name: 'logs/app.log' });

// Agregamos un directorio recursivamentearchive.directory('uploads/', 'archivos_usuario');

// Agregamos una cadena como archivoarchive.append('Este es el contenido del archivo', { name: 'leeme.txt' });

// Finalizamos la compresiónarchive.finalize();


Envío de un archivo a través de una respuesta HTTP

const express = require('ex                    

Recommendations