Využite balíky Archiver a Unzipper na kompresiu a dekomprimáciu súborov v Node.js.

Archivácia súborov je v modernom svete každodennou činnosťou, pretože každý môže potvrdiť výhody, ktoré ponúka kompresia súborov alebo priečinkov do menších prenosných formátov.

Formát ZIP je jedným z najpopulárnejších archívnych formátov používaných vo svete výpočtovej techniky a dôrazne sa odporúča voľba pre každého, kto potrebuje konvertovať nespracované súbory na archívy pre lepšie ukladanie, efektívny prenos alebo čokoľvek iné dôvod.

Prečo by ste teda mali zvážiť kompresiu súborov a ako môžete komprimovať súbory do ZIP a extrahovať ich späť do pôvodného stavu programovo pomocou Node.js?

Prečo komprimovať súbory?

Súbory a priečinky sa mnohokrát veľmi zväčšia a ich zdieľanie alebo prenos sa stáva problémom, pretože sú buď sú príliš veľké na to, aby sa dali uložiť na úložnú jednotku s konkrétnou kapacitou, alebo ich nahranie do cloudu trvá príliš dlho skladovanie.

V scenároch, ako je tento a mnohé ďalšie, by ste mali komprimovať takéto súbory alebo priečinky na oveľa menšiu veľkosť. Okrem jednoduchšieho prenosu súborov existujú aj ďalšie dôvody, prečo by ste mohli zvážiť kompresiu súborov:

instagram viewer

  • Efektívne skladovanie
  • Lepšia štruktúra a organizácia súborov
  • Zabezpečenie (šifrovanie súborov a ochrana heslom)
  • Integrita súboru
  • Verzia súborov

Čo sú balíky Node.js Archiver a Unzipper?

The Archív oficiálna dokumentácia balíka popisuje balík ako „streamovacie rozhranie na generovanie archívov“. To znamená, že balík Archiver poskytuje knižnicu funkcií, ktoré využívajú prúdy Node.js na vytváranie komprimovaných archívov súborov.

Balík Archiver štandardne podporuje viacero formátov archívov vrátane ZIP, GZIP a TAR. Balík tiež umožňuje vytvárať archívy zo súborov a adresárov a rozdeliť veľké archívy na menšie časti (viaczväzkové archívy). Umožňuje tiež vylúčiť alebo filtrovať súbory počas kompresie.

The Rozopnúť zips package je veľmi efektívny balík na extrahovanie ZIP archívov v Node.js. Balík poskytuje ľahko použiteľné rozhranie API, ktoré umožňuje vývojárom extrahovať súbory ZIP pomocou niekoľkých riadkov kódu.

Balíky Archiver a Unzipper sú voľbami pre tento tutoriál, pretože sa bez problémov integrujú s Node.js fs modul, ktorý zaisťuje bezproblémovú kompatibilitu a jednoduchosť.

Ako komprimovať súbory do formátu ZIP v Node.js

Komprimovanie súborov do formátu ZIP v Node.js je jednoduché ako v akomkoľvek inom jazyku vďaka balíku Archiver. Ak chcete vytvoriť archívy ZIP v Node.js, pričom budete postupovať podľa tejto časti, musíte na svojom počítači nastaviť vývojové prostredie Node.js.

Vytvoríte jednoduchý skript Node.js na kompresiu súboru a priečinka do formátu ZIP. Vytvorte nový projekt Node na svojom počítači spustením nasledujúcich príkazov:

mkdir node-zip-archiver
cd node-zip-archiver
npm init -y

Ďalej musíte do svojho projektu nainštalovať balík Archiver. Bežať npm install archivator --save vo vašom termináli, aby ste ho nainštalovali. Po dokončení inštalácie balíka vytvorte nový súbor v adresári projektu a pomenujte ho podľa svojich preferencií, napr. app.js alebo archiver.js.

The fs modul spracováva operácie so súbormi, zatiaľ čo balík Archiver zvládne kompresiu súborov a priečinkov do archívov ZIP, preto skript vyžaduje oba moduly.

Vytváranie archívov ZIP zo súborov

Nasledujúci kód je implementáciou funkcie, ktorá akceptuje súbor ako argument a vytvorí komprimovanú ZIP verziu súboru.

konšt archivátor = vyžadovať('archiver')
konšt fs = vyžadovať('fs')

// vytvorte ZIP zo súboru
konšt createZipFromFile = (súbor) => {
konšt filePath = __dirname + '/' + súbor
konšt output = fs.createWriteStream (filePath + '.PSČ')
konšt archív = archivátor('PSČ', {
zlib: { úrovni: 9 } // nastavenie úrovne kompresie na najvyššiu
})

archív.potrubie (výstup);
archive.file (filePath, { názov: súbor })
archive.finalize()
}

Funkcia skomprimuje názov súboru a vygeneruje výstupný súbor s podobným názvom (jediným rozdielom je pridanie prípony súboru ZIP).

Potom funkcia vygeneruje nový archív s úrovňou kompresie nastavenou na 9 (najvyššia) a použije súbor rúra funkcia na prenos výstupných tokov archívu do vstupu výstupného súboru.

The súbor funkcia pridá súbor do archívu. Akceptuje cestu k súboru ako parameter a voliteľné možnosti parameter, kde môžete špecifikovať vlastnosti súboru v archíve.

The názov voľba určuje názov súboru v archíve. Ak pri pridávaní súboru do archívu táto možnosť nie je špecifikovaná, Archiver umiestni súbor do archívu na základe jeho pôvodnej cesty, pričom zachová adresárovú štruktúru.

Ak je to však explicitne poskytnuté, Archiver pridá súbor do archívu bez jeho pôvodnej cesty, čo umožňuje vlastné pomenovanie a organizáciu v rámci archívu.

Vytváranie archívov ZIP z priečinkov

Proces vytvárania archívov ZIP z priečinkov sa veľmi nelíši od procesu pre súbory. Hlavným rozdielom je použitie balíka Archiver adresár funkciu na rozdiel od súbor v predchádzajúcej funkcii.

Nižšie je uvedená implementácia funkcie na kompresiu priečinka do archívu ZIP.

// vytvorte ZIP z priečinka
konšt createZipFromFolder = (priečinok) => {
konšt folderPath = __dirname + '/' + priečinok
konšt output = fs.createWriteStream (cesta k priečinku + '.PSČ')

konšt archív = archivátor('PSČ', {
zlib: { úrovni: 9 } // nastavenie úrovne kompresie na najvyššiu
})

archive.pipe (výstup)
archive.directory (cesta k priečinku, falošný)
archive.finalize()
}

The adresár funkcia berie cestu k priečinku ako svoj prvý argument a príznak ako svoj druhý argument. Príznak určuje umiestnenie priečinka v rámci archívu.

Keď je príznak nastavený na falošný, výsledný archív bude obsahovať iba obsah priečinka, s výnimkou samotného priečinka. Ale ak je príznak nastavený na pravda, Archiver zahrnie samotný priečinok do vygenerovaného archívu

Ak sa chcete vyhnúť kontaminácii miesta, kam archív extrahujete, súbormi z komprimovaného archívu, mali by ste porozmýšľať nad nastavením vlajka možnosť pravda. Môžete ho však nastaviť na falošný, ak to lepšie vyhovuje vašim účelom.

Ako dekomprimovať súbory v Node.js

Proces extrakcie súborov ZIP v Node.js má viacero prístupov a na použitie je k dispozícii niekoľko knižníc, ale v tomto článku je použitý balík Unzipper.

Spustite nasledujúci príkaz vo svojom termináli a nainštalujte balík Unzipper vo svojom projekte.

npm install unzipper --save

Po nainštalovaní balíka ho importujte do svojho kódu a implementujte funkciu extrakcie ZIP zobrazenú v kóde nižšie:

konšt rozopínanie = vyžadovať("rozopnúť")

//funkcia na extrahovanie súboru ZIP
konšt extraktZip = async (súbor) => {
konšt filePath = __dirname + '/' + súbor
konšt outputPath = __dirname + '/extrahované'
čakať fs.createReadStream (filePath)
.fajka (rozopínacia. Výpis ({ cesta: výstupná cesta }))
.promise()
}

The extraktZip funkcia je asynchrónna funkcia, ktorá vytvára čítací prúd na čítanie obsahu súboru ZIP a extrahuje súbor do zadanej výstupnej cesty (vytvorí extrahované priečinok, ak neexistuje).

V prípade dekompresie alebo extrakcie nie je potrebné definovať rôzne funkcie pre súbory a priečinky, pretože archív ZIP je súbor bez ohľadu na obsah v ňom.

Nižšie je uvedená funkcia, ktorú môžete pridať do aplikácie a otestovať funkcie, ktoré ste doteraz vytvorili:

(asyncfunkciu () {
konšt súbor = 'test.pdf'
konšt priečinok = 'test_folder'
konšt zipFile = 'test.pdf.zip'
createZipFromFile (súbor)
konzoly.log('ZIP archív úspešne vytvorený zo súboru')
createZipFromFolder (priečinok)
konzoly.log('ZIP archív úspešne vytvorený z priečinka')
čakať extractZip (zipFile)
konzoly.log('ZIP archív úspešne extrahovaný')
}) ()

Všetky predchádzajúce funkcie sú Funkcie šípok JavaScriptu, ale vyššie uvedená funkcia je iná, pretože ide o an Okamžite vyvolaný funkčný výraz že zapuzdruje kód v ňom a okamžite ho vykoná.

Kompresia súborov je výhodná pri vytváraní efektívnych aplikácií

Vždy by malo byť cieľom, aby boli vaše aplikácie čo najefektívnejšie, aby lepšie slúžili používateľom a zachovali si príjemnú používateľskú skúsenosť.

V scenároch, kde potrebujete v rámci aplikácie preniesť veľa súborov, zvážte kompresiu a dekomprimáciu súborov počas prenosu. Väčšina moderných programovacích jazykov poskytuje podporu na efektívnu kompresiu a dekompresiu súborov.