Biblioteca Adm-Zip para trabajar con archivos ZIP en Node.js
Al desarrollar aplicaciones web, utilidades de servidor o herramientas de procesamiento de datos en Node.js, a menudo surge la necesidad de trabajar con archivos ZIP: empaquetar archivos antes de enviarlos al usuario, descomprimir archivos recibidos o manipular su contenido sin descomprimirlos por completo. En el ecosistema de JavaScript, existen varias bibliotecas para estas tareas, y una de las más populares y fáciles de usar es Adm-Zip.
¿Qué es Adm-Zip?
Adm-Zip es una biblioteca JavaScript pura para Node.js que permite crear, leer y modificar archivos ZIP sin dependencias externas (por ejemplo, sin necesidad de instalar la utilidad zip o unzip en el sistema). Funciona tanto con archivos en disco como con búferes en memoria, lo que la hace ideal para servidores web y funciones en la nube.
Principales capacidades de la biblioteca:
- Creación de nuevos archivos ZIP a partir de archivos, carpetas o datos de cadena.
- Extracción de archivos a un directorio específico o a un búfer.
- Lectura del contenido del archivo sin descompresión completa (visualización de la lista de archivos, lectura de entradas individuales).
- Adición, eliminación y actualización de archivos dentro de un archivo existente.
- Trabajo con comentarios en el archivo y en archivos individuales.
- Soporte de contraseñas (cifrado ZipCrypto).
- Trabajo con flujos (Stream) para procesar grandes volúmenes de datos.
Instalación
La instalación de la biblioteca es estándar para paquetes npm:
npm install adm-zipDespués de la instalación, puedes importarla en tu proyecto:
const AdmZip = require('adm-zip');Creación de un archivo ZIP
Crear un nuevo archivo es muy sencillo. Puedes agregar tanto archivos individuales como carpetas completas.
const AdmZip = require('adm-zip');
// Creamos una nueva instancia del archivoconst zip = new AdmZip();
// Agregamos un archivo desde una cadenazip.addFile('hello.txt', Buffer.from('¡Hola, Mundo!', 'utf8'));
// Agregamos un archivo desde el discozip.addLocalFile('/ruta/a/imagen.jpg');
// Agregamos el contenido de una carpeta localzip.addLocalFolder('/ruta/a/documentos', 'backup/docs');
// Escribimos el archivo en el discozip.writeZip('miarchivo.zip');
console.log('Archivo creado: miarchivo.zip');También puedes obtener el archivo como un búfer para enviarlo a través de una respuesta HTTP:
const zipBuffer = zip.toBuffer();// Ahora zipBuffer se puede enviar al usuario como un archivo binarioExtracción de un archivo ZIP
La extracción se realiza en pocas líneas. La biblioteca admite tanto la extracción de todos los archivos como la lectura de entradas individuales.
const AdmZip = require('adm-zip');
try { // Abrimos un archivo existente const zip = new AdmZip('miarchivo.zip');
// Extraemos todos los archivos a la carpeta especificada zip.extractAllTo('extraido/', true); // true — sobrescribir archivos existentes
console.log('Archivo extraído en la carpeta extraido/');} catch (err) { console.error('Error al extraer:', err.message);}Si necesitas leer el contenido del archivo sin extraerlo:
const zip = new AdmZip('miarchivo.zip');
// Obtenemos un arreglo de entradas (archivos y carpetas)const zipEntries = zip.getEntries();
zipEntries.forEach(entry => { if (!entry.isDirectory) { console.log(`Archivo: ${entry.entryName}, tamaño: ${entry.header.size} bytes`); // Leemos el contenido del archivo como cadena const content = entry.getData().toString('utf8'); console.log('Contenido:', content.substring(0, 100)); }});Trabajo con contraseñas (cifrado)
Adm-Zip admite el cifrado ZipCrypto. Ten en cuenta: no es el método más moderno (no se admite AES), pero es adecuado para protección básica.
<
También en la biblioteca
Generación de PDF en Swift: creación de documentos para iOS y macOS
AVFoundation para Swift: guía completa con ejemplos
Bibliotecas WebSocket para Node.js: ws, Socket.IO y uWebSockets.js
Métricas de Prometheus en Go (Golang): guía completa de monitoreo