Trabajo con archivos ZIP en Node.js: biblioteca Adm-Zip

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

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-zip


Despué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 binario


Extracció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.



<

Recommendations