Travailler avec les archives ZIP dans Node.js : la bibliothèque Adm-Zip

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Bibliothèque Adm-Zip pour la manipulation des archives ZIP dans Node.js

Lors du développement d'applications web, d'utilitaires serveur ou d'outils de traitement de données sur Node.js, il est souvent nécessaire de travailler avec des archives ZIP : compresser des fichiers avant de les envoyer à un utilisateur, extraire des archives reçues ou manipuler leur contenu sans extraction complète. Dans l'écosystème JavaScript, il existe plusieurs bibliothèques pour ces tâches, et l'une des plus populaires et des plus simples à utiliser est Adm-Zip.



Qu'est-ce qu'Adm-Zip ?

Adm-Zip est une bibliothèque JavaScript pure pour Node.js qui permet de créer, lire et modifier des archives ZIP sans dépendances externes (par exemple, sans avoir à installer l'utilitaire zip ou unzip sur le système). Elle fonctionne aussi bien avec des fichiers sur le disque qu'avec des tampons en mémoire, ce qui la rend idéale pour les serveurs web et les fonctions cloud.



Principales fonctionnalités de la bibliothèque :

  • Création de nouvelles archives ZIP à partir de fichiers, dossiers ou données textuelles.
  • Extraction d'archives avec décompression dans un répertoire spécifié ou dans un tampon.
  • Lecture du contenu d'une archive sans extraction complète (affichage de la liste des fichiers, lecture d'entrées individuelles).
  • Ajout, suppression et mise à jour de fichiers dans une archive existante.
  • Gestion des commentaires pour l'archive et les fichiers individuels.
  • Prise en charge des mots de passe (chiffrement ZipCrypto).
  • Fonctionnement avec les flux (Stream) pour le traitement de grandes données.


Installation

L'installation de la bibliothèque est standard pour les paquets npm :

npm install adm-zip


Après l'installation, vous pouvez l'importer dans votre projet :

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


Création d'une archive ZIP

Créer une nouvelle archive est très simple. Vous pouvez ajouter aussi bien des fichiers individuels que des dossiers entiers.



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

// Créons une nouvelle instance d'archiveconst zip = new AdmZip();

// Ajoutons un fichier à partir d'une chaîne de caractèreszip.addFile('hello.txt', Buffer.from('Bonjour, le monde !', 'utf8'));

// Ajoutons un fichier depuis le disquezip.addLocalFile('/chemin/vers/image.jpg');

// Ajoutons le contenu d'un dossier localzip.addLocalFolder('/chemin/vers/documents', 'sauvegarde/docs');

// Écrivons l'archive sur le disquezip.writeZip('monarchive.zip');

console.log('Archive créée : monarchive.zip');


Vous pouvez également obtenir l'archive sous forme de tampon pour l'envoyer via une réponse HTTP :

const zipBuffer = zip.toBuffer();// Maintenant, zipBuffer peut être envoyé à l'utilisateur comme fichier binaire


Extraction d'une archive ZIP

L'extraction s'effectue en quelques lignes. La bibliothèque prend en charge à la fois l'extraction de tous les fichiers et la lecture d'entrées individuelles.



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

try { // Ouvrons une archive existante const zip = new AdmZip('monarchive.zip');

// Extrayons tous les fichiers dans un dossier spécifié zip.extractAllTo('extrait/', true); // true — écraser les fichiers existants

console.log('Archive extraite dans le dossier extrait/');} catch (err) { console.error('Erreur lors de l\'extraction :', err.message);}


Si vous devez lire le contenu de l'archive sans l'extraire :

const zip = new AdmZip('monarchive.zip');

// Obtenons un tableau des entrées (fichiers et dossiers)const zipEntries = zip.getEntries();

zipEntries.forEach(entry => { if (!entry.isDirectory) { console.log(`Fichier : ${entry.entryName}, taille : ${entry.header.size} octets`); // Lisons le contenu du fichier comme une chaîne de caractères const content = entry.getData().toString('utf8'); console.log('Contenu :', content.substring(0, 100)); }});


Gestion des mots de passe (chiffrement)

Adm-Zip prend en charge le chiffrement ZipCrypto. Notez que ce n'est pas la méthode la plus moderne (AES n'est pas pris en charge), mais elle convient pour une protection de base.



<

Recommendations