Der gesamte vorhandene Archiv- und Unarchive-Ordner muss im Projekt verwendet werden. Bei der Suche nach einer Lösung habe ich einige beliebte Bibliotheken ausprobiert, hauptsächlich adm-zip, JSZip, Archiver usw.
1.Verwenden Sie adm-zip
adm-zip unterstützt die Funktion zum Archivieren und Entarchivieren einer oder mehrerer Dateien oder eines gesamten Ordners, was sehr einfach und bequem zu verwenden ist.
var adm_zip = require('adm-zip'); //creating archives var zip = new adm_zip(); zip.addLocalFolder('archiver'); zip.writeZip('adm/adm-archive.zip'); //extracting archives var unzip = new adm_zip('adm/adm-archive.zip'); unzip.extractAllTo("adm/adm-unarchive/", /*overwrite*/true);
Vor- und Nachteile:
1. Es führt gleichzeitig Komprimierung und Dekomprimierung durch und kann mit vorhandenen Dateien oder Ordnern arbeiten, sofern der Pfad bereitgestellt wird. Es implementiert viele Schnittstellen und ist einfach zu verwenden.
2. Es liegt ein Fehler an sich vor, und manchmal kann die dekomprimierte Datei nicht als Originaldatei wiederhergestellt werden. Hoffentlich werden diese Fehler im Laufe der Zeit behoben.
2. Verwenden SieJSZip
Wenn Sie diese Bibliothek verwenden, müssen Sie Dateien einzeln zum Zip-Objekt hinzufügen, den Inhalt manuell hinzufügen und dann den Dateischreibvorgang verwenden, um das Zip-Objekt im Speicher in physischen Speicher umzuwandeln. Wenn es sich also um einen gesamten Ordner handelt, ist es sehr mühsam und muss den Ordner durchlaufen.
var JSZip = require("jszip"); var fs = require("fs"); var zip = new JSZip(); var file_content = fs.readFileSync('archive/a.txt'); zip.file("a.txt",file_content); var data = fs.readFileSync("archive/img/pic.jpeg"); zip.file("img/pic.jpeg", data, {base64: true}); var zipfolder = zip.generate({type:"nodebuffer"}); fs.writeFile("jszip.zip", zipfolder, function(err) { if (err) throw err; });
Es gibt auch eine Ordnermethode in JSZip, die jedoch nur zum Wechseln des virtuellen Pfads innerhalb des Zip-Objekts verwendet wird. Beispielsweise dient zip.folder("img").file('a.txt') zum Hinzufügen Erstellen Sie unten ein img-Unterverzeichnis der Datei a.txt. Der Effekt entspricht zip.file("img/a.txt"). Hierbei ist auch zu beachten, dass der Inhalt der Datei manuell hinzugefügt werden muss. Wenn es nur zip.file("a.txt"); ist, wird nur eine TXT-Datei mit leerem Inhalt im Zip-Objekt erstellt im Speicher vorhanden ist, muss es in die Datei geschrieben werden, bevor es tatsächlich auf der Festplatte gespeichert wird.
Vor- und Nachteile:
1. Es eignet sich besser zum Konvertieren einiger in Echtzeit empfangener Daten in ZIP. 2. Es ist umständlich, vorhandene Ordner zu bedienen. Sie müssen den Inhalt einzeln zum Zip-Objekt hinzufügen und ihn dann in Dateien konvertieren.
3. Viel Codierung erfordert Aufmerksamkeit.
4. Nur Komprimierungsfunktion.
3. Verwenden Sie Archiver und Entpacken
Diese Kombination ist die letzte, die ich verwendet habe. Sie ist zuverlässiger und einfacher zu verwenden und unterstützt das ZIP-Format. Sie müssen nur den Pfad zum Komprimieren des vorhandenen Ordners angeben. Komprimierung:
var fs = require('fs'); var archiver = require('archiver'); var output = fs.createWriteStream('archiver-unzip.zip'); var archive = archiver('zip'); archive.on('error', function(err){ throw err; }); archive.pipe(output); archive.bulk([ { src: ['archiver/**']} ]); archive.finalize();
Entpacken:
var fs = require("fs"); var unzip = require("unzip"); fs.createReadStream('archiver-unzip.zip').pipe(unzip.Extract({ path: 'unarchive' }));
Vor- und Nachteile:
1. Es wurde schon lange ausprobiert und weist weniger Fehler auf.
2. Einfach zu bedienen, kein Durchsuchen von Ordnern erforderlich.
3. Sie bieten nur Komprimierung oder Dekomprimierung, nicht beide Funktionen. (Adm-zip ist also eigentlich sehr nützlich, aber Fehler sind ein Fehler...)
Dies sind nur einige der Bibliotheken, die ich gestern gefunden habe. Gerne können Sie weitere Bibliotheken empfehlen