Uporabite paketa Archiver in Unzipper za stiskanje in dekompresijo datotek v Node.js.
Arhiviranje datotek je v sodobnem svetu vsakodnevna dejavnost, saj lahko vsak potrdi prednosti stiskanja datotek ali map v manjše, prenosljive formate.
Format ZIP je eden najbolj priljubljenih arhivskih formatov, ki se uporablja v svetu računalništva, in je zelo priporočljiv izbira za vsakogar, ki mora neobdelane datoteke pretvoriti v arhive za boljše shranjevanje, učinkovit prenos ali kar koli drugega razlog.
Zakaj bi torej morali razmisliti o stiskanju datotek in kako lahko stisnete datoteke v ZIP in jih programsko ekstrahirate nazaj v prvotno stanje z uporabo Node.js?
Zakaj stisniti datoteke?
Velikokrat postanejo datoteke in mape zelo velike in njihova skupna raba ali prenos postane težava, ker so preveliki za shranjevanje na pomnilniški pogon določene kapacitete ali pa traja predolgo za nalaganje v oblak shranjevanje.
V scenarijih, kot je ta in mnogih drugih, bi morali takšne datoteke ali mape stisniti v veliko manjšo velikost. Poleg lažjega prenosa datotek so drugi razlogi za stiskanje datotek naslednji:
- Učinkovito shranjevanje
- Boljša struktura in organizacija datotek
- Varnost (šifriranje datotek in zaščita z geslom)
- Celovitost datoteke
- Različice datotek
Kaj sta paketa za arhiviranje in razpakiranje Node.js?
The Arhivar uradna dokumentacija paketa opisuje paket kot "pretočni vmesnik za ustvarjanje arhivov". To pomeni, da paket Archiver ponuja knjižnico funkcij, ki izkoriščajo tokove Node.js za ustvarjanje arhivov stisnjenih datotek.
Paket Archiver privzeto podpira več formatov arhivov, vključno z ZIP, GZIP in TAR. Paket omogoča tudi ustvarjanje arhivov iz datotek in imenikov ter razdelitev velikih arhivov na manjše dele (arhivi z več nosilci). Omogoča tudi izključitev ali filtriranje datotek med stiskanjem.
The Odpnite zadrgo package je zelo učinkovit paket za ekstrahiranje ZIP arhivov v Node.js. Paket ponuja API, enostaven za uporabo, ki razvijalcem omogoča ekstrahiranje datotek ZIP s samo nekaj vrsticami kode.
Paketa Archiver in Unzipper sta izbrana za to vadnico, ker se neopazno integrirata z Node.js fs modul, ki zagotavlja nemoteno združljivost in preprostost.
Kako stisniti datoteke v format ZIP v Node.js
Stiskanje datotek v format ZIP v Node.js je enostaven, tako kot v katerem koli drugem jeziku, zahvaljujoč paketu Archiver. Za ustvarjanje arhivov ZIP v Node.js ob upoštevanju tega razdelka potrebujete v računalniku nastavljeno razvojno okolje Node.js.
Ustvarili boste preprost skript Node.js za stiskanje datoteke in mape v format ZIP. Ustvarite nov projekt Node v vašem računalniku tako, da zaženete naslednje ukaze:
mkdir vozlišče-zip-arhivator
cd vozlišče-zip-arhivator
npm init -y
Nato morate v svoj projekt namestiti paket Archiver. Teči npm namestite arhivar --save v vašem terminalu, da ga namestite. Ko je namestitev paketa končana, ustvarite novo datoteko v imeniku projekta in jo poimenujte po svojih željah, npr. app.js oz archiver.js.
The fs modul obravnava operacije datotek, medtem ko bo paket Archiver poskrbel za stiskanje datotek in map v arhive ZIP, zato skript zahteva oba modula.
Ustvarjanje arhivov ZIP iz datotek
Naslednja koda je implementacija funkcije, ki sprejme datoteko kot argument in ustvari stisnjeno ZIP različico datoteke.
konst arhivar = zahtevati('arhivator')
konst fs = zahtevati('fs')// ustvari ZIP iz datoteke
konst createZipFromFile = (mapa) => {
konst filePath = __dirname + '/' + datoteka
konst izhod = fs.createWriteStream (filePath + '.zip')
konst arhiv = arhivar('zip', {
zlib: { raven: 9 } // nastavite stopnjo stiskanja na najvišjo
})
archive.pipe (izhod);
archive.file (filePath, { ime: mapa })
archive.finalize()
}
Funkcija vzame ime datoteke za stiskanje in ustvari izhodno datoteko s podobnim imenom (z edino razliko, ki je dodana pripona datoteke ZIP).
Nato funkcija ustvari nov arhiv s stopnjo stiskanja, nastavljeno na 9 (najvišja) in uporabi cev funkcijo za prenos izhodnih tokov arhiva v vhod izhodne datoteke.
The mapa funkcija doda datoteko v arhiv. Sprejema pot datoteke kot parameter in neobvezno opcije parameter, kjer lahko določite lastnosti datoteke v arhivu.
The ime možnost označuje ime datoteke v arhivu. Če možnost ni določena pri dodajanju datoteke v arhiv, Archiver postavi datoteko v arhiv na podlagi njene prvotne poti in ohrani strukturo imenika.
Če pa je to izrecno navedeno, Archiver doda datoteko v arhiv brez izvirne poti, kar omogoča poimenovanje po meri in organizacijo znotraj arhiva.
Ustvarjanje ZIP arhivov iz map
Postopek ustvarjanja arhivov ZIP iz map se ne razlikuje zelo od tistega za datoteke. Glavna razlika je uporaba paketa Archiver imenik funkcijo v nasprotju z mapa v prejšnji funkciji.
Spodaj je implementacija funkcije za stiskanje mape v arhiv ZIP.
// ustvari ZIP iz mape
konst createZipFromFolder = (mapo) => {
konst folderPath = __dirname + '/' + mapa
konst izhod = fs.createWriteStream (folderPath + '.zip')konst arhiv = arhivar('zip', {
zlib: { raven: 9 } // nastavite stopnjo stiskanja na najvišjo
})
archive.pipe (izhod)
archive.directory (folderPath, lažno)
archive.finalize()
}
The imenik funkcija vzame pot do mape kot prvi argument in zastavico kot drugi argument. Zastavica določa postavitev mape znotraj arhiva.
Ko je zastavica nastavljena na lažno, bo nastali arhiv vseboval samo vsebino mape, brez same mape. Če pa je zastavica nastavljena na prav, bo Archiver samo mapo vključil v ustvarjeni arhiv
Če se želite izogniti onesnaženju mesta, kjer ekstrahirate svoj arhiv, z datotekami iz stisnjenega arhiva, morate razmisliti o nastavitvi zastava možnost za prav. Lahko pa ga nastavite na lažno, če bolj ustreza vašim namenom.
Kako razpakirati datoteke v Node.js
Postopek ekstrahiranja datotek ZIP v Node.js ima več pristopov in več knjižnic je na voljo za uporabo, vendar je v tem članku uporabljen paket Unzipper.
Zaženite naslednji ukaz v svojem terminalu, da namestite paket Unzipper v svoj projekt.
npm install unzipper --save
Ko namestite paket, ga uvozite v svojo kodo in implementirajte funkcijo ekstrakcije ZIP, prikazano v spodnji kodi:
konst odpreti zadrgo = zahtevati("odpenjanje")
// funkcija za ekstrahiranje datoteke ZIP
konst izvlečekZip = asinh (datoteka) => {
konst filePath = __dirname + '/' + datoteka
konst outputPath = __dirname + '/izvlečeno'
čakati fs.createReadStream (filePath)
.pipe (odpiranje zadrge. Izvleček ({ pot: izhodna pot }))
.promise()
}
The extractZip funkcija je asinhrona funkcija, ki ustvari bralni tok za branje vsebine datoteke ZIP in ekstrahira datoteko na podano izhodno pot (ustvari izvlečen mapa, če ne obstaja).
V primeru dekompresije ali ekstrakcije ni treba definirati različnih funkcij za datoteke in mape, saj je ZIP arhiv datoteka, ne glede na vsebino v njej.
Spodaj je funkcija, ki jo lahko dodate v aplikacijo, da preizkusite funkcije, ki ste jih ustvarili do sedaj:
(asinhfunkcijo () {
konst datoteka = 'test.pdf'
konst mapa = 'test_mapa'
konst zipFile = 'test.pdf.zip'
createZipFromFile (datoteka)
konzola.log('ZIP arhiv uspešno ustvarjen iz datoteke')
createZipFromFolder (mapa)
konzola.log('ZIP arhiv uspešno ustvarjen iz mape')
čakati extractZip (zipFile)
konzola.log('ZIP arhiv uspešno ekstrahiran')
}) ()
Vse prejšnje funkcije so Puščične funkcije JavaScript, vendar je zgornja funkcija drugačna, ker je Takoj priklican izraz funkcije to enkapsulira kodo znotraj njega in ga takoj izvede.
Stiskanje datotek je koristno pri izdelavi učinkovitih aplikacij
Vedno si morate prizadevati, da bodo vaše aplikacije čim bolj učinkovite, da bodo bolje služile uporabnikom in ohranile prijetno uporabniško izkušnjo.
V scenarijih, kjer morate prenesti veliko datotek znotraj aplikacije, razmislite o stiskanju in razpakiranju datotek med prenosom. Večina sodobnih programskih jezikov zagotavlja podporo za učinkovito stiskanje in razširjanje datotek.