Arbeiten mit ZIP-Archiven in Node.js: vollständige Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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


Erstellen 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 werden


Bibliothek 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 archiver


Erstellen 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                    

Empfehlungen