Arbeiten mit ZIP-Archiven in Node.js: Bibliotheken adm-zip und archiver
In der modernen Webentwicklung mit Node.js besteht häufig die Notwendigkeit, mit Archiven zu arbeiten: Logs zu packen, Dateien in Gruppen zu übertragen, hochgeladene Benutzerdaten zu entpacken. In diesem Material betrachten wir zwei Hauptbibliotheken für die Arbeit mit dem ZIP-Format — adm-zip und archiver. Sie lösen praktisch alle Aufgaben im Zusammenhang mit der Archivierung und eignen sich sowohl für einfache Skripte als auch für Produktionsanwendungen hervorragend.
Bibliothek adm-zip: Universelles Werkzeug zum Lesen und Schreiben von ZIP
adm-zip ist eine reine JavaScript-Implementierung für die Arbeit mit ZIP-Archiven ohne externe Abhängigkeiten. Sie ermöglicht sowohl das Erstellen neuer Archive als auch das Lesen/Ändern vorhandener. Die Bibliothek ist einfach zu bedienen und erfordert keine Installation zusätzlicher Systemdienstprogramme.
Installation
npm install adm-zipErstellen eines ZIP-Archivs
const AdmZip = require('adm-zip');const fs = require('fs');
// Erstellen einer neuen Archivinstanzconst zip = new AdmZip();
// Hinzufügen von Dateien aus einem Buffer oder Stringzip.addFile('hello.txt', Buffer.from('Hello, World!', 'utf8'));
// Hinzufügen einer lokalen Dateizip.addLocalFile('/path/to/image.png');
// Hinzufügen eines gesamten Ordnerszip.addLocalFolder('/path/to/documents', 'docs');
// Archiv auf die Festplatte schreibenzip.writeZip('./output/archive.zip');
console.log('Archiv erfolgreich erstellt!');Lesen und Entpacken eines vorhandenen Archivs
const AdmZip = require('adm-zip');
// Vorhandenes Archiv ladenconst zip = new AdmZip('./input/archive.zip');
// Liste der Dateien abrufenconst zipEntries = zip.getEntries();zipEntries.forEach((entry) => { console.log(`Datei: ${entry.entryName}, Größe: ${entry.header.size} Bytes`);});
// Alle Dateien in den angegebenen Ordner extrahierenzip.extractAllTo('./extracted', true); // true — vorhandene Dateien überschreiben
// Oder Inhalt einer bestimmten Datei abrufenconst content = zip.readAsText('data.json');console.log('Inhalt von data.json:', content);Arbeiten mit Buffern (ohne Schreiben auf die Festplatte)
const AdmZip = require('adm-zip');const zip = new AdmZip();
zip.addFile('report.csv', 'id,name,age1,John,30');
// Archiv als Buffer für HTTP-Versand abrufenconst archiveBuffer = zip.toBuffer();
// Jetzt kann archiveBuffer als Serverantwort gesendet// oder an eine andere Funktion übergeben werdenBibliothek archiver: Fortgeschrittenes Streaming-Archivieren
archiver ist eine leistungsstärkere Bibliothek, die für die Arbeit mit großen Datenmengen optimiert ist. Sie verwendet Node.js-Streams, was das Archivieren von Dateien "on the fly" ohne Laden des gesamten Inhalts in den Speicher ermöglicht. Dies ist die ideale Wahl für Serveranwendungen mit begrenzten Ressourcen.
Installation
npm install archiverErstellen eines Archivs mit Streaming-Ausgabe
const archiver = require('archiver');const fs = require('fs');const path = require('path');
// Schreibstrom erstellenconst output = fs.createWriteStream('./backup.zip');const archive = archiver('zip', { zlib: { level: 9 } // Maximale Komprimierungsstufe});
// Ereignisbehandlungoutput.on('close', () => { console.log(`Archiv erstellt: ${archive.pointer()} Bytes`);});
archive.on('error', (err) => { throw err;});
// Archivstrom mit der Ausgabedatei verbindenarchive.pipe(output);
// Dateien hinzufügenarchive.file('/var/log/app.log', { name: 'logs/app.log' });
// Verzeichnis rekursiv hinzufügenarchive.directory('uploads/', 'user_files');
// Zeichenkette als Datei hinzufügenarchive.append('Dies ist der Dateiinhalt', { name: 'readme.txt' });
// Archivierung abschließenarchive.finalize();Senden eines Archivs über HTTP-Antwort
const express = require('ex Auch in der Bibliothek
Kryptographie in Java: Verschlüsselung und Hashing – praktischer Leitfaden
Arbeit mit Daten in PHP: Die Bibliothek Carbon
Supertest für JavaScript (Node.js): Komplettguide mit Beispielen
JWT-Tokens in PHP: Vollständiger Leitfaden zur Authentifizierung und Autorisierung