Bruk Archiver og Unzipper-pakker for å komprimere og dekomprimere filer i Node.js.
Filarkivering er en daglig aktivitet i den moderne verden, da alle kan bekrefte fordelene ved å komprimere filer eller mapper til mindre, bærbare formater.
ZIP-formatet er et av de mest populære arkivformatene som brukes i dataverdenen, og det anbefales på det sterkeste valg for alle som trenger å konvertere råfiler til arkiver for bedre lagring, effektiv overføring eller noe annet grunnen til.
Så hvorfor bør du vurdere å komprimere filene dine, og hvordan kan du komprimere filer til ZIP og pakke dem ut til deres opprinnelige tilstand programmatisk ved å bruke Node.js?
Hvorfor komprimere filer?
Mange ganger blir filer og mapper veldig store, og deling eller overføring av dem blir et problem fordi de enten for store til å lagre på en lagringsstasjon med en bestemt kapasitet, eller de tar for lang tid å laste opp til skyen Oppbevaring.
I scenarier som dette og mange flere, bør du komprimere slike filer eller mapper til en mye mindre størrelse. Bortsett fra enklere filoverføring, inkluderer andre grunner til at du kan vurdere å komprimere filene dine:
- Effektiv lagring
- Bedre filstruktur og organisering
- Sikkerhet (filkryptering og passordbeskyttelse)
- Filintegritet
- Filversjon
Hva er Node.js Archiver og Unzipper-pakkene?
De Arkiver pakkens offisielle dokumentasjon beskriver pakken som "et streaming-grensesnitt for arkivgenerering". Dette innebærer at Archiver-pakken gir et bibliotek med funksjoner som utnytter Node.js-strømmer for å lage komprimerte filarkiver.
Archiver-pakken støtter flere arkivformater som standard, inkludert ZIP, GZIP og TAR. Pakken lar deg også lage arkiver fra filer og kataloger, og dele store arkiver i mindre deler (flervolumsarkiver). Den lar deg også ekskludere eller filtrere filer under komprimering.
De Glidelås pakke er en veldig effektiv pakke for å trekke ut ZIP-arkiver i Node.js. Pakken gir en brukervennlig API som lar utviklere pakke ut ZIP-filer med bare noen få linjer med kode.
Archiver- og Unzipper-pakkene er valgene for denne opplæringen fordi de sømløst integreres med Node.js fs modul, som sikrer jevn kompatibilitet og enkelhet.
Hvordan komprimere filer til ZIP-format i Node.js
Komprimering av filer til ZIP-format i Node.js er enkelt, akkurat som på alle andre språk, takket være Archiver-pakken. For å lage ZIP-arkiver i Node.js mens du følger med i denne delen, trenger du et Node.js-utviklingsmiljø satt opp på datamaskinen din.
Du vil lage et enkelt Node.js-skript for å komprimere en fil og mappe til ZIP-format. Opprett et nytt nodeprosjekt på datamaskinen din ved å kjøre følgende kommandoer:
mkdir node-zip-arkiver
cd node-zip-arkiver
npm init -y
Deretter må du installere Archiver-pakken i prosjektet ditt. Løpe npm installer arkiver --save i terminalen for å installere den. Når pakkeinstallasjonen er fullført, lag en ny fil i prosjektkatalogen og navngi den etter dine preferanser, f.eks. app.js eller archiver.js.
De fs modulen håndterer filoperasjoner, mens Archiver-pakken vil håndtere komprimering av filer og mapper til ZIP-arkiver, derfor krever skriptet begge modulene.
Opprette ZIP-arkiver fra filer
Følgende kode er implementeringen av en funksjon som godtar en fil som et argument og lager en komprimert ZIP-versjon av filen.
konst arkiver = krever('arkiver')
konst fs = krever('fs')// opprette ZIP fra fil
konst createZipFromFile = (fil) => {
konst filePath = __dirnavn + '/' + fil
konst output = fs.createWriteStream (filbane + '.glidelås')
konst arkiv = arkiver('glidelås', {
zlib: { nivå: 9 } // sett komprimeringsnivået til det høyeste
})
archive.pipe (utgang);
archive.file (filbane, { Navn: fil })
archive.finalize()
}
Funksjonen tar filnavnet til filen for å komprimere og genererer en utdatafil med et lignende navn (med den eneste forskjellen er tillegget av ZIP-filtypen).
Deretter genererer funksjonen et nytt arkiv med komprimeringsnivået satt til 9 (høyest) og bruker rør funksjon for å overføre utdatastrømmene til arkivet til inngangen til utdatafilen.
De fil funksjonen legger til en fil i arkivet. Den godtar filbanen som en parameter og en valgfri alternativer parameter hvor du kan spesifisere egenskapene til filen i arkivet.
De Navn alternativet angir navnet på filen i arkivet. Hvis alternativet ikke er spesifisert når du legger til en fil i arkivet, plasserer Archiver filen i arkivet basert på den opprinnelige banen, og bevarer katalogstrukturen.
Men når det er eksplisitt oppgitt, legger Archiver filen til arkivet uten dens opprinnelige bane, noe som gir mulighet for tilpasset navn og organisering i arkivet.
Opprette ZIP-arkiver fra mapper
Prosessen med å lage ZIP-arkiver fra mapper er ikke veldig forskjellig fra den for filer. Hovedforskjellen er bruken av Archiver-pakken katalog funksjon i motsetning til fil i forrige funksjon.
Nedenfor er implementeringen av en funksjon for å komprimere en mappe til et ZIP-arkiv.
// opprett ZIP fra mappen
konst createZipFromFolder = (mappe) => {
konst folderPath = __dirnavn + '/' + mappe
konst output = fs.createWriteStream (mappePath + '.glidelås')konst arkiv = arkiver('glidelås', {
zlib: { nivå: 9 } // sett komprimeringsnivået til det høyeste
})
archive.pipe (utgang)
archive.directory (mappebane, falsk)
archive.finalize()
}
De katalog funksjonen tar mappebanen som sitt første argument og et flagg som sitt andre argument. Flagget bestemmer plasseringen av mappen i arkivet.
Når flagget er satt til falsk, vil det resulterende arkivet bare inneholde innholdet i mappen, unntatt selve mappen. Men hvis flagget er satt til ekte, vil Archiver inkludere selve mappen i det genererte arkivet
Hvis du vil unngå å forurense stedet der du trekker ut arkivet med filer fra det komprimerte arkivet, bør du tenke på å angi flagg mulighet til ekte. Du kan imidlertid sette den til falsk, hvis det passer bedre for dine formål.
Hvordan dekomprimere filer i Node.js
Prosessen med å trekke ut ZIP-filer i Node.js har flere tilnærminger og flere biblioteker er tilgjengelige for bruk, men i denne artikkelen brukes Unzipper-pakken.
Kjør følgende kommando i terminalen for å installere Unzipper-pakken i prosjektet ditt.
npm installer unzipper --save
Etter å ha installert pakken, importer den inn i koden din og implementer ZIP-ekstraksjonsfunksjonen vist i koden nedenfor:
konst løs glidelås = krever("glidelås")
//funksjon for å pakke ut ZIP-fil
konst extractZip = asynkron (fil) => {
konst filePath = __dirnavn + '/' + fil
konst outputPath = __katalognavn + '/utvunnet'
avvente fs.createReadStream (filbane)
.pipe (glidelås. Ekstrakt({ sti: outputPath }))
.love()
}
De extractZip funksjon er en asynkron funksjon som oppretter en lesestrøm for å lese innholdet i ZIP-filen, og trekker ut filen til utdatabanen som er spesifisert (den lager utvunnet mappe hvis den ikke eksisterer).
Ved dekomprimering eller utpakking er det ikke nødvendig å definere forskjellige funksjoner for filer og mapper, ettersom et ZIP-arkiv er en fil uavhengig av innholdet i det.
Nedenfor er en funksjon du kan legge til i applikasjonen for å teste funksjonene du har laget så langt:
(asynkronfunksjon () {
konst fil = 'test.pdf'
konst mappe = 'test_mappe'
konst zipfil = 'test.pdf.zip'
createZipFromFile (fil)
konsoll.Logg('ZIP-arkiv ble opprettet fra fil')
createZipFromFolder (mappe)
konsoll.Logg('ZIP-arkiv ble opprettet fra mappe')
avvente extractZip (zipFile)
konsoll.Logg("ZIP-arkivet er hentet ut")
}) ()
Alle de tidligere funksjonene er JavaScript-pilfunksjoner, men funksjonen ovenfor er annerledes fordi den er en Umiddelbart påkalt funksjonsuttrykk at innkapsler koden inne i den og utfører den umiddelbart.
Filkomprimering er gunstig for å bygge effektive applikasjoner
Det bør alltid være et mål å gjøre applikasjonene dine så effektive som de kan være for å kunne betjene brukerne bedre og opprettholde en hyggelig brukeropplevelse.
I scenarier der du trenger å overføre mange filer i applikasjonen, bør du vurdere å komprimere og dekomprimere filene mens du sender. De fleste moderne programmeringsspråk gir støtte for å komprimere og dekomprimere filer effektivt.