Travailler avec les archives ZIP dans Node.js : guide complet

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

Travailler avec les archives ZIP dans Node.js : bibliothèques adm-zip et archiver



Dans le développement web moderne avec Node.js, il est souvent nécessaire de travailler avec des archives : compresser des logs, transférer des fichiers par groupes, décompresser des données téléchargées par l'utilisateur. Dans cet article, nous examinerons deux bibliothèques principales pour travailler avec le format ZIP — adm-zip et archiver. Elles résolvent pratiquement toutes les tâches liées à l'archivage et conviennent parfaitement aussi bien pour des scripts simples que pour des applications de production.



Bibliothèque adm-zip : outil universel pour lire et écrire des ZIP



adm-zip est une implémentation purement JavaScript pour travailler avec des archives ZIP sans dépendances externes. Elle permet à la fois de créer de nouvelles archives et de lire/modifier des archives existantes. La bibliothèque est simple à utiliser et ne nécessite pas l'installation d'utilitaires système supplémentaires.



Installation

npm install adm-zip


Création d'une archive ZIP

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

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

// Ajouter des fichiers à partir d'un buffer ou d'une chaînezip.addFile('hello.txt', Buffer.from('Hello, World!', 'utf8'));

// Ajouter un fichier localzip.addLocalFile('/path/to/image.png');

// Ajouter un dossier entierzip.addLocalFolder('/path/to/documents', 'docs');

// Écrire l'archive sur le disquezip.writeZip('./output/archive.zip');

console.log('Archive créée avec succès !');


Lecture et décompression d'une archive existante

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

// Charger une archive existanteconst zip = new AdmZip('./input/archive.zip');

// Obtenir la liste des fichiersconst zipEntries = zip.getEntries();zipEntries.forEach((entry) => { console.log(`Fichier : ${entry.entryName}, taille : ${entry.header.size} octets`);});

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

// Ou obtenir le contenu d'un fichier spécifiqueconst content = zip.readAsText('data.json');console.log('Contenu de data.json :', content);


Travailler avec des buffers (sans écriture sur le disque)

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

zip.addFile('report.csv', 'id,name,age1,John,30');

// Obtenir l'archive sous forme de Buffer pour l'envoyer via HTTPconst archiveBuffer = zip.toBuffer();

// Maintenant, archiveBuffer peut être envoyé comme réponse du serveur// ou passé à une autre fonction


Bibliothèque archiver : archivage avancé par flux



archiver est une bibliothèque plus puissante, optimisée pour travailler avec de grands volumes de données. Elle utilise les flux (streams) de Node.js, ce qui permet d'archiver des fichiers « à la volée » sans charger tout le contenu en mémoire. C'est un choix idéal pour les applications serveur avec des ressources limitées.



Installation

npm install archiver


Création d'une archive avec sortie par flux

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

// Créer un flux d'écritureconst output = fs.createWriteStream('./backup.zip');const archive = archiver('zip', { zlib: { level: 9 } // Niveau de compression maximal});

// Gestion des événementsoutput.on('close', () => { console.log(`Archive créée : ${archive.pointer()} octets`);});

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

// Connecter le flux de l'archive au fichier de sortiearchive.pipe(output);

// Ajouter des fichiersarchive.file('/var/log/app.log', { name: 'logs/app.log' });

// Ajouter un répertoire récursivementarchive.directory('uploads/', 'user_files');

// Ajouter une chaîne comme fichierarchive.append('Ceci est le contenu du fichier', { name: 'readme.txt' });

// Finaliser l'archivagearchive.finalize();


Envoi d'une archive via une réponse HTTP

const express = require('ex                    

Recommendations