Arbeiten mit ZIP-Archiven in Node.js: Die Bibliotheken archiver und adm-zip
In der modernen Webentwicklung mit Node.js besteht häufig die Notwendigkeit, Dateien in Archive zu packen oder Daten daraus zu extrahieren. Ob es sich um Backups, das Herunterladen mehrerer Dateien als ein Archiv oder die Verarbeitung von Benutzerdaten handelt – die Arbeit mit dem ZIP-Format bleibt gefragt. Für Node.js gibt es mehrere beliebte Bibliotheken, und in diesem Artikel betrachten wir die beiden leistungsstärksten und praktischsten: archiver (zum Erstellen von Archiven) und adm-zip (zum Lesen und Bearbeiten von Archiven).
Wozu braucht man Bibliotheken für die Arbeit mit ZIP?
Node.js bietet standardmäßig keine integrierten Werkzeuge für die Arbeit mit Archiven. Obwohl es das Modul zlib zur Komprimierung einzelner Streams gibt, sind für die Erstellung vollwertiger ZIP-Dateien mit mehreren Dateien und Ordnern spezialisierte Lösungen erforderlich. Die Bibliotheken archiver und adm-zip lösen diese Aufgaben, indem sie eine einfache API und hohe Leistung bieten.
Installation der Bibliotheken
Beide Bibliotheken werden über npm installiert. Führen Sie im Terminal aus:
npm install archiver adm-zipDie Bibliothek archiver: Erstellen von ZIP-Archiven
archiver ist eine Bibliothek zum Erstellen von Archiven in verschiedenen Formaten (ZIP, TAR, GZIP). Sie arbeitet mit Streams, was eine effiziente Verarbeitung großer Datenmengen ermöglicht, ohne die gesamte Datei in den Speicher laden zu müssen.
Hauptfunktionen von archiver:
- Erstellen von ZIP-Archiven mit anpassbarem Komprimierungsgrad
- Hinzufügen von Dateien und ganzen Verzeichnissen
- Arbeit mit Streams zur Speicherschonung
- Unterstützung für Kommentare und Metadaten
Beispiel: Erstellen eines einfachen ZIP-Archivs
const fs = require('fs');const archiver = require('archiver');
// Erstellen eines Schreibstreams in eine Dateiconst output = fs.createWriteStream('example.zip');const archive = archiver('zip', { zlib: { level: 9 } }); // maximale Komprimierung
// Ereignisbehandlungoutput.on('close', () => { console.log(`Archiv erstellt: ${archive.pointer()} Bytes`);});
archive.on('error', (err) => { throw err;});
// Dateien hinzufügenarchive.append('Inhalt der Datei 1', { name: 'file1.txt' });archive.file('/path/to/existing/file.txt', { name: 'renamed-file.txt' });archive.directory('my_folder/', 'new_folder_name');
// Archivierung abschließenarchive.pipe(output);archive.finalize();Beispiel: Archivierung mit Stream-Übertragung
const http = require('http');const archiver = require('archiver');
http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'application/zip', 'Content-disposition': 'attachment; filename=download.zip' });
const archive = archiver('zip', { zlib: { level: 5 } }); archive.pipe(res);
archive.append('Textdatei', { name: 'text.txt' }); archive.append(Buffer.from([0x00, 0x01, 0x02]), { name: 'binary.bin' }); archive.finalize();}).listen(3000);Die Bibliothek adm-zip: Lesen und Extrahieren von Archiven
adm-zip ist eine universelle Bibliothek für die Arbeit mit ZIP-Archiven: Lesen, Schreiben, Aktualisieren und Extrahieren. Im Gegensatz zu archiver arbeitet sie nicht nur mit Streams, sondern auch mit Puffern, was für kleine Archive praktisch ist.
Hauptfunktionen von adm-zip:
- Lesen vorhandener ZIP-Dateien
- Extrahieren aller oder einzelner Dateien
- Schreiben neuer Archive (Alternative zu archiver)
- Arbeit mit Puffern und Zeichenketten
Beispiel: Extrahieren von Dateien aus einem Archiv
const AdmZip = require('adm-zip');
// Vorhandenes Archiv ladenconst zip = new AdmZip('./example.zip');
// Dateiliste abrufenconst zipEntries = zip.getEntries();zipEntries.forEach((entry) => { console.log(`Datei Auch in der Bibliothek
goose für Go: Vollständige Anleitung mit Beispielen
Swagger/OpenAPI-Generierung für Go (Golang): Vollständige Anleitung
JWT-Tokens in PHP: Vollständiger Leitfaden zur Authentifizierung und Autorisierung
Dokka für Kotlin: Das komplette Tutorial mit Praxisbeispielen