Iskoristite pakete Archiver i Unzipper za komprimiranje i dekomprimiranje datoteka u Node.js.
Arhiviranje datoteka je svakodnevna aktivnost u modernom svijetu jer svatko može potvrditi prednosti koje nudi komprimiranje datoteka ili mapa u manje, prijenosne formate.
ZIP format jedan je od najpopularnijih arhivskih formata koji se koristi u svijetu računalstva i toplo se preporučuje izbor za svakoga tko treba pretvoriti neobrađene datoteke u arhive za bolju pohranu, učinkovit prijenos ili bilo što drugo razlog.
Dakle, zašto biste trebali razmisliti o komprimiranju datoteka i kako možete komprimirati datoteke u ZIP i programski ih izvući natrag u izvorno stanje pomoću Node.js?
Zašto komprimirati datoteke?
Mnogo puta datoteke i mape postanu jako velike, a njihovo dijeljenje ili prijenos postaje problem jer su ili su prevelike za pohranjivanje na pogon za pohranu određenog kapaciteta ili im treba predugo za prijenos u oblak skladištenje.
U scenarijima kao što je ovaj i mnogim drugim, trebali biste komprimirati takve datoteke ili mape u puno manju veličinu. Osim lakšeg prijenosa datoteka, drugi razlozi zašto biste mogli razmisliti o komprimiranju datoteka uključuju:
- Učinkovito skladištenje
- Bolja struktura i organizacija datoteka
- Sigurnost (šifriranje datoteka i zaštita lozinkom)
- Integritet datoteke
- Verzija datoteke
Što su Node.js paketi za arhiviranje i raspakiranje?
The Arhivator službena dokumentacija paketa opisuje paket kao "streaming sučelje za generiranje arhive". To implicira da paket Archiver pruža biblioteku funkcija koje iskorištavaju Node.js tokove za stvaranje komprimiranih arhiva datoteka.
Paket Archiver prema zadanim postavkama podržava više formata arhive, uključujući ZIP, GZIP i TAR. Paket vam također omogućuje stvaranje arhiva iz datoteka i direktorija, te dijeljenje velikih arhiva u manje dijelove (arhive s više volumena). Također vam omogućuje izuzimanje ili filtriranje datoteka tijekom kompresije.
The Otkopčaj package je vrlo učinkovit paket za izdvajanje ZIP arhiva u Node.js. Paket pruža API jednostavan za korištenje koji programerima omogućuje izdvajanje ZIP datoteka sa samo nekoliko redaka koda.
Paketi Archiver i Unzipper izbor su za ovaj vodič jer se besprijekorno integriraju s Node.js fs modul, osiguravajući glatku kompatibilnost i jednostavnost.
Kako komprimirati datoteke u ZIP format u Node.js
Sažimanje datoteka u ZIP format u Node.js je jednostavan kao i u bilo kojem drugom jeziku, zahvaljujući paketu za arhiviranje. Za stvaranje ZIP arhiva u Node.js dok slijedite ovaj odjeljak, potrebno vam je razvojno okruženje Node.js postavljeno na vašem računalu.
Napravit ćete jednostavnu skriptu Node.js za komprimiranje datoteke i mape u ZIP format. Stvorite novi Node projekt na svom računalu pokretanjem sljedećih naredbi:
mkdir node-zip-arhivator
CD čvor-zip-arhivator
npm init -y
Zatim trebate instalirati paket arhivatora u svoj projekt. Trčanje npm instaliraj arhivar --spremi u svoj terminal da biste ga instalirali. Kada je instalacija paketa dovršena, stvorite novu datoteku u direktoriju projekta i nazovite je prema svojim željama, npr. app.js ili arhiver.js.
The fs modul rukuje operacijama datoteka, dok će paket Archiver rukovati kompresijom datoteka i mapa u ZIP arhive, stoga skripta zahtijeva oba modula.
Stvaranje ZIP arhiva iz datoteka
Sljedeći kod je implementacija funkcije koja prihvaća datoteku kao argument i stvara komprimiranu ZIP verziju datoteke.
konst arhiver = zahtijevati('arhivator')
konst fs = zahtijevati('fs')// kreiraj ZIP iz datoteke
konst createZipFromFile = (datoteka) => {
konst filePath = __dirname + '/' + datoteka
konst izlaz = fs.createWriteStream (filePath + '.zip')
konst arhiva = arhivar('zip', {
zlib: { razini: 9 } // postaviti razinu kompresije na najvišu
})
arhiva.cijev (izlaz);
archive.file (filePath, { Ime: datoteka })
archive.finalize()
}
Funkcija uzima naziv datoteke za komprimiranje i generira izlaznu datoteku sa sličnim nazivom (sa jedinom razlikom što je dodatak ekstenzije ZIP datoteke).
Zatim funkcija generira novu arhivu s razinom kompresije postavljenom na 9 (najviša) i koristi cijev funkcija za prijenos izlaznih tokova arhive u ulaz izlazne datoteke.
The datoteka funkcija dodaje datoteku u arhivu. Prihvaća putanju datoteke kao parametar i opciju opcije parametar gdje možete odrediti svojstva datoteke u arhivi.
The Ime opcija označava naziv datoteke unutar arhive. Ako opcija nije navedena prilikom dodavanja datoteke u arhivu, Archiver smješta datoteku unutar arhive na temelju izvorne putanje, čuvajući strukturu direktorija.
Međutim, kada je izričito navedeno, Archiver dodaje datoteku u arhivu bez njezine izvorne putanje, dopuštajući prilagođeno imenovanje i organizaciju unutar arhive.
Stvaranje ZIP arhiva iz mapa
Proces stvaranja ZIP arhiva iz mapa ne razlikuje se mnogo od onog za datoteke. Glavna razlika je korištenje paketa za arhiviranje imenik funkcija za razliku od datoteka u prethodnoj funkciji.
Ispod je implementacija funkcije za komprimiranje mape u ZIP arhivu.
// kreiraj ZIP iz mape
konst createZipFromFolder = (mapa) => {
konst folderPath = __dirname + '/' + mapa
konst izlaz = fs.createWriteStream (folderPath + '.zip')konst arhiva = arhivar('zip', {
zlib: { razini: 9 } // postaviti razinu kompresije na najvišu
})
archive.pipe (izlaz)
archive.directory (folderPath, lažno)
archive.finalize()
}
The imenik funkcija uzima putanju mape kao prvi argument, a zastavu kao drugi argument. Zastavica određuje položaj mape unutar arhive.
Kada je zastavica postavljena na lažno, rezultirajuća arhiva sadržavat će samo sadržaj mape, isključujući samu mapu. Ali ako je zastavica postavljena na pravi, Archiver će samu mapu uključiti u generiranu arhivu
Ako želite izbjeći kontaminaciju lokacije na koju izdvajate svoju arhivu datotekama iz komprimirane arhive, trebali biste razmisliti o postavljanju zastava opcija za pravi. Međutim, možete ga postaviti na lažno, ako bolje odgovara vašim ciljevima.
Kako dekomprimirati datoteke u Node.js
Proces izdvajanja ZIP datoteka u Node.js ima više pristupa i nekoliko je biblioteka dostupno za korištenje, ali u ovom članku koristi se paket Unzipper.
Pokrenite sljedeću naredbu na svom terminalu da instalirate paket Unzipper u svoj projekt.
npm install raspakirajte --save
Nakon instaliranja paketa, uvezite ga u svoj kod i implementirajte funkciju izdvajanja ZIP-a prikazanu u kodu ispod:
konst otvoriti patentni zatvarač = zahtijevati("otpakširač")
//funkcija za izdvajanje ZIP datoteke
konst ekstraktZip = asinkroni (datoteka) => {
konst filePath = __dirname + '/' + datoteka
konst outputPath = __dirname + '/izdvojeno'
čekati fs.createReadStream (putanja datoteke)
.cijev (zatvarač. Ekstrakt({ staza: izlazni put }))
.obećanje()
}
The ekstraktZip funkcija je asinkrona funkcija koja stvara tok čitanja za čitanje sadržaja ZIP datoteke i ekstrahira datoteku na navedenu izlaznu stazu (stvara izvađen mapa ako ne postoji).
U slučaju dekompresije ili ekstrakcije, nema potrebe za definiranjem različitih funkcija za datoteke i mape, budući da je ZIP arhiva datoteka bez obzira na sadržaj u njoj.
Ispod je funkcija koju možete dodati aplikaciji kako biste testirali funkcije koje ste do sada izradili:
(asinkronifunkcija () {
konst datoteka = 'test.pdf'
konst mapa = 'test_mapa'
konst zipDatoteka = 'test.pdf.zip'
createZipFromFile (datoteka)
konzola.log('ZIP arhiva uspješno kreirana iz datoteke')
createZipFromFolder (mapa)
konzola.log('ZIP arhiva uspješno kreirana iz mape')
čekati ekstraktZip (zipDatoteka)
konzola.log('ZIP arhiva uspješno izdvojena')
}) ()
Sve prethodne funkcije su JavaScript funkcije strelica, ali gornja funkcija je drugačija jer je Izraz funkcije koji se odmah poziva da enkapsulira kod unutar njega i odmah ga izvršava.
Kompresija datoteka je korisna u izradi učinkovitih aplikacija
Uvijek bi trebao biti cilj učiniti vaše aplikacije što učinkovitijima kako bi bolje služile korisnicima i održale ugodno korisničko iskustvo.
U scenarijima u kojima trebate prenijeti mnogo datoteka unutar aplikacije, razmislite o komprimiranju i dekompresiji datoteka tijekom prijenosa. Većina modernih programskih jezika pruža podršku za učinkovito sažimanje i dekomprimiranje datoteka.