Nutzen Sie Archiver- und Unzipper-Pakete, um Dateien in Node.js zu komprimieren und zu dekomprimieren.

Die Archivierung von Dateien ist in der modernen Welt eine alltägliche Tätigkeit, da jeder die Vorteile bestätigen kann, die das Komprimieren von Dateien oder Ordnern in kleinere, tragbare Formate bietet.

Das ZIP-Format ist eines der beliebtesten Archivformate in der Computerwelt und wird dringend empfohlen Wahl für alle, die Rohdateien zur besseren Speicherung, effizienten Übertragung oder aus anderen Gründen in Archive konvertieren müssen Grund.

Warum sollten Sie also darüber nachdenken, Ihre Dateien zu komprimieren, und wie können Sie Dateien in ZIP komprimieren und sie mithilfe von Node.js programmgesteuert in ihren ursprünglichen Zustand zurückversetzen?

Warum Dateien komprimieren?

Oftmals werden Dateien und Ordner sehr groß und das Teilen oder Übertragen wird aufgrund ihrer Größe zu einem Problem Entweder sind sie zu groß, um sie auf einem Speicherlaufwerk mit einer bestimmten Kapazität zu speichern, oder das Hochladen in die Cloud dauert zu lange Lagerung.

instagram viewer

In solchen und vielen weiteren Szenarien sollten Sie solche Dateien oder Ordner auf eine viel kleinere Größe komprimieren. Neben der einfacheren Dateiübertragung gibt es weitere Gründe, warum Sie eine Komprimierung Ihrer Dateien in Betracht ziehen könnten:

  • Effiziente Lagerung
  • Bessere Dateistruktur und -organisation
  • Sicherheit (Dateiverschlüsselung und Passwortschutz)
  • Dateiintegrität
  • Dateiversionierung

Was sind die Node.js-Archiver- und Unzipper-Pakete?

Der Archivierer Die offizielle Dokumentation des Pakets beschreibt das Paket als „eine Streaming-Schnittstelle zur Archivgenerierung“. Dies bedeutet, dass das Archiver-Paket eine Bibliothek mit Funktionen bereitstellt, die Node.js-Streams nutzen, um komprimierte Dateiarchive zu erstellen.

Das Archiver-Paket unterstützt standardmäßig mehrere Archivformate, einschließlich ZIP, GZIP und TAR. Mit dem Paket können Sie außerdem Archive aus Dateien und Verzeichnissen erstellen und große Archive in kleinere Teile aufteilen (Archive mit mehreren Volumes). Außerdem können Sie Dateien während der Komprimierung ausschließen oder filtern.

Der Entpacken Paket ist ein sehr effizientes Paket zum Extrahieren von ZIP-Archiven in Node.js. Das Paket bietet eine benutzerfreundliche API, die es Entwicklern ermöglicht, ZIP-Dateien mit nur wenigen Codezeilen zu extrahieren.

Die Pakete Archiver und Unzipper sind die Wahl für dieses Tutorial, da sie sich nahtlos in Node.js integrieren lassen fs Modul, das eine reibungslose Kompatibilität und Einfachheit gewährleistet.

So komprimieren Sie Dateien in Node.js in das ZIP-Format

Komprimieren von Dateien Das ZIP-Format in Node.js ist dank des Archiver-Pakets einfach wie in jeder anderen Sprache. Um im Rahmen dieses Abschnitts ZIP-Archive in Node.js zu erstellen, muss auf Ihrem Computer eine Node.js-Entwicklungsumgebung eingerichtet sein.

Sie erstellen ein einfaches Node.js-Skript, um eine Datei und einen Ordner in das ZIP-Format zu komprimieren. Erstellen Sie ein neues Node-Projekt auf Ihrem Computer, indem Sie die folgenden Befehle ausführen:

mkdir Node-Zip-Archiver
CD Node-Zip-Archiver
npm init -y

Als nächstes müssen Sie das Archiver-Paket in Ihrem Projekt installieren. Laufen npm install archiver --save in Ihrem Terminal, um es zu installieren. Wenn die Paketinstallation abgeschlossen ist, erstellen Sie eine neue Datei im Projektverzeichnis und benennen Sie sie nach Ihren Wünschen, z. B. app.js oder archiver.js.

Der fs Das Modul übernimmt Dateioperationen, während das Archiver-Paket die Komprimierung von Dateien und Ordnern in ZIP-Archive übernimmt. Daher erfordert das Skript beide Module.

ZIP-Archive aus Dateien erstellen

Der folgende Code ist die Implementierung einer Funktion, die eine Datei als Argument akzeptiert und eine komprimierte ZIP-Version der Datei erstellt.

const Archiver = erfordern('Archiver')
const fs = erfordern('fs')

// ZIP aus Datei erstellen
const createZipFromFile = (Datei) => {
const filePath = __dirname + '/' + Datei
const Ausgabe = fs.createWriteStream (filePath + '.Reißverschluss')
const archive = Archiver('Reißverschluss', {
zlib: { eben: 9 } // Komprimierungsstufe auf den höchsten Wert setzen
})

archive.pipe (Ausgabe);
archive.file (filePath, { Name: Datei })
archive.finalize()
}

Die Funktion verwendet den Dateinamen der zu komprimierenden Datei und generiert eine Ausgabedatei mit einem ähnlichen Namen (mit dem einzigen Unterschied, dass die ZIP-Dateierweiterung hinzugefügt wird).

Anschließend generiert die Funktion ein neues Archiv mit der Komprimierungsstufe 9 (höchste) und verwendet das Rohr Funktion zum Übertragen der Ausgabeströme des Archivs in die Eingabe der Ausgabedatei.

Der Datei Funktion fügt eine Datei zum Archiv hinzu. Es akzeptiert den Dateipfad als Parameter und optional Optionen Parameter, mit dem Sie die Eigenschaften der Datei im Archiv angeben können.

Der Name Die Option bezeichnet den Namen der Datei im Archiv. Wenn die Option beim Hinzufügen einer Datei zum Archiv nicht angegeben wird, platziert Archiver die Datei basierend auf ihrem ursprünglichen Pfad im Archiv und behält dabei die Verzeichnisstruktur bei.

Wenn dies jedoch explizit angegeben wird, fügt Archiver die Datei dem Archiv ohne ihren ursprünglichen Pfad hinzu, was eine benutzerdefinierte Benennung und Organisation innerhalb des Archivs ermöglicht.

Erstellen von ZIP-Archiven aus Ordnern

Der Prozess zum Erstellen von ZIP-Archiven aus Ordnern unterscheidet sich nicht wesentlich von dem für Dateien. Der Hauptunterschied besteht in der Verwendung der Archiver-Pakete Verzeichnis Funktion im Gegensatz zu Datei in der vorherigen Funktion.

Nachfolgend finden Sie die Implementierung einer Funktion zum Komprimieren eines Ordners in ein ZIP-Archiv.

// ZIP aus Ordner erstellen
const createZipFromFolder = (Ordner) => {
const FolderPath = __dirname + '/' + Ordner
const Ausgabe = fs.createWriteStream (folderPath + '.Reißverschluss')

const archive = Archiver('Reißverschluss', {
zlib: { eben: 9 } // Komprimierungsstufe auf den höchsten Wert setzen
})

archive.pipe (Ausgabe)
archive.directory (folderPath, FALSCH)
archive.finalize()
}

Der Verzeichnis Die Funktion verwendet den Ordnerpfad als erstes Argument und ein Flag als zweites Argument. Das Flag bestimmt die Platzierung des Ordners im Archiv.

Wenn das Flag auf gesetzt ist FALSCH, enthält das resultierende Archiv nur den Inhalt des Ordners, mit Ausnahme des Ordners selbst. Aber wenn die Flagge auf gesetzt ist WAHR, Archiver fügt den Ordner selbst in das generierte Archiv ein

Wenn Sie vermeiden möchten, dass der Speicherort, an dem Sie Ihr Archiv extrahieren, mit Dateien aus dem komprimierten Archiv kontaminiert wird, sollten Sie über die Einstellung nachdenken Flagge Option zu WAHR. Sie können es jedoch auf einstellen FALSCH, wenn es Ihren Zwecken besser entspricht.

So dekomprimieren Sie Dateien in Node.js

Für das Extrahieren von ZIP-Dateien in Node.js gibt es mehrere Ansätze und es stehen mehrere Bibliotheken zur Verfügung. In diesem Artikel wird jedoch das Unzipper-Paket verwendet.

Führen Sie den folgenden Befehl in Ihrem Terminal aus, um das Unzipper-Paket in Ihrem Projekt zu installieren.

npm install unzipper --save

Importieren Sie das Paket nach der Installation in Ihren Code und implementieren Sie die im folgenden Code gezeigte ZIP-Extraktionsfunktion:

const entpacken = erfordern(„entpacken“)

//Funktion zum Extrahieren der ZIP-Datei
const extractZip = asynchron (Datei) => {
const filePath = __dirname + '/' + Datei
const OutputPath = __dirname + '/extrahiert'
erwarten fs.createReadStream (filePath)
.pipe (entpacken. Extrakt({ Weg: Ausgabepfad }))
.versprechen()
}

Der extractZip Funktion ist eine asynchrone Funktion, die einen Lesestream erstellt, um den Inhalt der ZIP-Datei zu lesen, und die Datei in den angegebenen Ausgabepfad extrahiert (sie erstellt die extrahiert Ordner, falls er nicht existiert).

Beim Dekomprimieren oder Extrahieren müssen keine unterschiedlichen Funktionen für Dateien und Ordner definiert werden, da ein ZIP-Archiv unabhängig vom darin enthaltenen Inhalt eine Datei ist.

Nachfolgend finden Sie eine Funktion, die Sie der Anwendung hinzufügen können, um die bisher erstellten Funktionen zu testen:

(asynchronFunktion () {
const Datei = 'test.pdf'
const Ordner = 'test_folder'
const zipFile = 'test.pdf.zip'
createZipFromFile (Datei)
Konsole.Protokoll(„ZIP-Archiv erfolgreich aus Datei erstellt“)
createZipFromFolder (Ordner)
Konsole.Protokoll(„ZIP-Archiv erfolgreich aus Ordner erstellt“)
erwarten extractZip (zipFile)
Konsole.Protokoll(„ZIP-Archiv erfolgreich extrahiert“)
}) ()

Alle vorherigen Funktionen sind JavaScript-Pfeilfunktionen, aber die obige Funktion ist anders, weil es eine ist Sofort aufgerufener Funktionsausdruck Das kapselt den Code darin und führt es sofort aus.

Die Dateikomprimierung ist beim Erstellen effizienter Anwendungen von Vorteil

Ziel sollte es immer sein, Ihre Anwendungen so effizient wie möglich zu gestalten, um den Benutzern einen besseren Service zu bieten und ein angenehmes Benutzererlebnis zu gewährleisten.

In Szenarien, in denen Sie viele Dateien innerhalb Ihrer Anwendung übertragen müssen, sollten Sie erwägen, die Dateien während der Übertragung zu komprimieren und zu dekomprimieren. Die meisten modernen Programmiersprachen unterstützen das effiziente Komprimieren und Dekomprimieren von Dateien.