Använd Archiver och Unzipper-paket för att komprimera och dekomprimera filer i Node.js.

Filarkivering är en daglig aktivitet i den moderna världen eftersom alla kan intyga fördelarna med att komprimera filer eller mappar till mindre, bärbara format.

ZIP-formatet är ett av de mest populära arkivformaten som används i datorvärlden, och det rekommenderas starkt val för alla som behöver konvertera råfiler till arkiv för bättre lagring, effektiv överföring eller något annat anledning.

Så varför ska du överväga att komprimera dina filer, och hur kan du komprimera filer till ZIP och extrahera dem till sitt ursprungliga tillstånd programmatiskt med hjälp av Node.js?

Varför komprimera filer?

Många gånger blir filer och mappar väldigt stora och att dela eller överföra dem blir ett problem eftersom de antingen för stora för att lagra på en lagringsenhet med en viss kapacitet, eller så tar de för lång tid att ladda upp till molnet lagring.

I scenarier som detta och många fler bör du komprimera sådana filer eller mappar till en mycket mindre storlek. Bortsett från enklare filöverföring, är andra skäl till varför du kan överväga att komprimera dina filer:

instagram viewer

  • Effektiv förvaring
  • Bättre filstruktur och organisation
  • Säkerhet (filkryptering och lösenordsskydd)
  • Filintegritet
  • Filversionering

Vad är Node.js Archiver och Unzipper-paket?

De Arkiverar paketets officiella dokumentation beskriver paketet som "ett strömmande gränssnitt för arkivgenerering". Detta innebär att Archiver-paketet tillhandahåller ett bibliotek med funktioner som utnyttjar Node.js-strömmar för att skapa komprimerade filarkiv.

Archiver-paketet stöder flera arkivformat som standard, inklusive ZIP, GZIP och TAR. Paketet låter dig också skapa arkiv från filer och kataloger, och dela upp stora arkiv i mindre delar (arkiv med flera volymer). Det låter dig också utesluta eller filtrera filer under komprimering.

De Blixtlås package är ett mycket effektivt paket för att extrahera ZIP-arkiv i Node.js. Paketet tillhandahåller ett lättanvänt API som låter utvecklare extrahera ZIP-filer med bara några rader kod.

Archiver- och Unzipper-paketen är valen för denna handledning eftersom de sömlöst integreras med Node.js fs modul, vilket säkerställer smidig kompatibilitet och enkelhet.

Hur man komprimerar filer till ZIP-format i Node.js

Komprimerar filer till ZIP-format i Node.js är enkelt precis som på alla andra språk, tack vare Archiver-paketet. För att skapa ZIP-arkiv i Node.js samtidigt som du följer med i det här avsnittet behöver du en Node.js-utvecklingsmiljö konfigurerad på din dator.

Du kommer att skapa ett enkelt Node.js-skript för att komprimera en fil och mapp till ZIP-format. Skapa ett nytt nodprojekt på din dator genom att köra följande kommandon:

mkdir nod-zip-arkiv
CD nod-zip-arkiverare
npm init -y

Därefter måste du installera Archiver-paketet i ditt projekt. Springa npm installera arkivering --save i din terminal för att installera den. När paketinstallationen är klar, skapa en ny fil i projektkatalogen och namnge den enligt dina önskemål, t.ex. app.js eller archiver.js.

De fs modulen hanterar filoperationer, medan Archiver-paketet kommer att hantera komprimeringen av filer och mappar till ZIP-arkiv, därför kräver skriptet båda modulerna.

Skapa ZIP-arkiv från filer

Följande kod är implementeringen av en funktion som accepterar en fil som ett argument och skapar en komprimerad ZIP-version av filen.

konst arkiverare = behöva('arkiverare')
konst fs = behöva('fs')

// skapa ZIP från fil
konst createZipFromFile = (fil) => {
konst filsökväg = __katalognamn + '/' + fil
konst output = fs.createWriteStream (filPath + '.blixtlås')
konst arkiv = arkivera('blixtlås', {
zlib: { nivå: 9 } // ställ in komprimeringsnivån till den högsta
})

archive.pipe (utgång);
archive.file (filPath, { namn: fil })
archive.finalize()
}

Funktionen tar filnamnet på filen för att komprimera och genererar en utdatafil med ett liknande namn (med den enda skillnaden är tillägget av ZIP-filtillägget).

Sedan genererar funktionen ett nytt arkiv med komprimeringsnivån inställd på 9 (högst) och använder rör funktion för att överföra utdataströmmar från arkivet till ingången för utdatafilen.

De fil funktionen lägger till en fil i arkivet. Den accepterar filsökvägen som en parameter och en valfri alternativ parameter där du kan ange egenskaperna för filen i arkivet.

De namn alternativet anger namnet på filen i arkivet. Om alternativet inte anges när du lägger till en fil i arkivet, placerar Archiver filen i arkivet baserat på dess ursprungliga sökväg, vilket bevarar katalogstrukturen.

Men när det uttryckligen anges lägger Archiver till filen i arkivet utan dess ursprungliga sökväg, vilket möjliggör anpassade namngivning och organisation inom arkivet.

Skapa ZIP-arkiv från mappar

Processen att skapa ZIP-arkiv från mappar skiljer sig inte mycket från den för filer. Den största skillnaden är användningen av Archiver-paketet katalog fungera i motsats till fil i föregående funktion.

Nedan är implementeringen av en funktion för att komprimera en mapp till ett ZIP-arkiv.

// skapa ZIP från mappen
konst createZipFromFolder = (mapp) => {
konst folderPath = __katalognamn + '/' + mapp
konst output = fs.createWriteStream (folderPath + '.blixtlås')

konst arkiv = arkivera('blixtlås', {
zlib: { nivå: 9 } // ställ in komprimeringsnivån till den högsta
})

archive.pipe (utgång)
archive.directory (folderPath, falsk)
archive.finalize()
}

De katalog funktion tar mappsökvägen som sitt första argument och en flagga som sitt andra argument. Flaggan bestämmer mappens placering i arkivet.

När flaggan är inställd på falsk, kommer det resulterande arkivet bara att innehålla mappens innehåll, exklusive själva mappen. Men om flaggan är inställd på Sann, kommer Archiver att inkludera själva mappen i det genererade arkivet

Om du vill undvika att förorena platsen där du extraherar ditt arkiv med filer från det komprimerade arkivet, bör du tänka på att ställa in flagga möjlighet att Sann. Du kan dock ställa in den på falsk, om det bättre passar dina syften.

Hur man dekomprimerar filer i Node.js

Processen att extrahera ZIP-filer i Node.js har flera metoder och flera bibliotek är tillgängliga för användning, men i den här artikeln används Unzipper-paketet.

Kör följande kommando i din terminal för att installera Unzipper-paketet i ditt projekt.

npm installera unzipper --save

När du har installerat paketet, importera det till din kod och implementera ZIP-extraktionsfunktionen som visas i koden nedan:

konst upplåsning = behöva("upplåsning")

//funktion för att extrahera ZIP-fil
konst extraheraZip = asynkron (fil) => {
konst filsökväg = __katalognamn + '/' + fil
konst outputPath = __katalognamn + '/extraherad'
vänta fs.createReadStream (filPath)
.pipe (dragkedja upp. Extrahera({ väg: utvägsflöde }))
.löfte()
}

De extraheraZip funktion är en asynkron funktion som skapar en läsström för att läsa innehållet i ZIP-filen och extraherar filen till den angivna utdatasökvägen (den skapar extraherades mapp om den inte finns).

I fallet med dekomprimering eller extrahering finns det inget behov av att definiera olika funktioner för filer och mappar, eftersom ett ZIP-arkiv är en fil oavsett innehållet i det.

Nedan finns en funktion som du kan lägga till i applikationen för att testa de funktioner du har skapat hittills:

(asynkronfungera () {
konst fil = "test.pdf"
konst mapp = 'test_mapp'
konst zipfil = "test.pdf.zip"
createZipFromFile (fil)
trösta.logga("ZIP-arkiv har skapats från fil")
createZipFromFolder (mapp)
trösta.logga("ZIP-arkiv har skapats från mapp")
vänta extractZip (zipFile)
trösta.logga("ZIP-arkiv har extraherats framgångsrikt")
}) ()

Alla tidigare funktioner är JavaScript-pilfunktioner, men ovanstående funktion är annorlunda eftersom den är en Omedelbart anropat funktionsuttryck den där kapslar in koden inom den och utför den omedelbart.

Filkomprimering är fördelaktigt för att bygga effektiva applikationer

Det bör alltid vara ett mål att göra dina applikationer så effektiva som de kan vara för att tjäna användarna bättre och upprätthålla en trevlig användarupplevelse.

I scenarier där du behöver överföra många filer i din applikation, överväg att komprimera och dekomprimera filerna medan du sänder. De flesta moderna programmeringsspråk ger stöd för att komprimera och dekomprimera filer effektivt.