Gør brug af Archiver og Unzipper-pakker til at komprimere og dekomprimere filer i Node.js.

Filarkivering er en hverdagsaktivitet i den moderne verden, da alle kan attestere de fordele, der tilbydes ved at komprimere filer eller mapper til mindre, bærbare formater.

ZIP-formatet er et af de mest populære arkivformater, der bruges i computerverdenen, og det kan varmt anbefales valg for alle, der har brug for at konvertere råfiler til arkiver for bedre opbevaring, effektiv overførsel eller noget andet grund.

Så hvorfor skulle du overveje at komprimere dine filer, og hvordan kan du komprimere filer til ZIP og udpakke dem tilbage til deres oprindelige tilstand programmæssigt ved hjælp af Node.js?

Hvorfor komprimere filer?

Mange gange bliver filer og mapper meget store, og deling eller overførsel af dem bliver et problem, fordi de enten for store til at gemme på et lagerdrev med en bestemt kapacitet, eller de tager for lang tid at uploade til skyen opbevaring.

I scenarier som dette og mange flere, bør du komprimere sådanne filer eller mapper til en meget mindre størrelse. Bortset fra lettere filoverførsel er andre grunde til, at du måske overvejer at komprimere dine filer:

instagram viewer

  • Effektiv opbevaring
  • Bedre filstruktur og organisation
  • Sikkerhed (filkryptering og adgangskodebeskyttelse)
  • Filintegritet
  • Filversionering

Hvad er Node.js Archiver og Unzipper-pakker?

Det Arkiver pakkens officielle dokumentation beskriver pakken som "en streaminggrænseflade til arkivgenerering". Dette indebærer, at Archiver-pakken indeholder et bibliotek af funktioner, der udnytter Node.js-streams til at skabe komprimerede filarkiver.

Archiver-pakken understøtter som standard flere arkivformater, inklusive ZIP, GZIP og TAR. Pakken giver dig også mulighed for at oprette arkiver fra filer og mapper og opdele store arkiver i mindre dele (arkiver med flere bind). Det giver dig også mulighed for at udelukke eller filtrere filer under komprimering.

Det Lynlås pakke er en meget effektiv pakke til at udtrække ZIP-arkiver i Node.js. Pakken giver en brugervenlig API, der giver udviklere mulighed for at udtrække ZIP-filer med blot et par linjer kode.

Archiver- og Unzipper-pakkerne er valgene til denne tutorial, fordi de problemfrit integreres med Node.js fs modul, hvilket sikrer jævn kompatibilitet og enkelhed.

Sådan komprimeres filer til ZIP-format i Node.js

Komprimering af filer til ZIP-format i Node.js er nemt ligesom på ethvert andet sprog, takket være Archiver-pakken. For at oprette ZIP-arkiver i Node.js, mens du følger med i dette afsnit, skal du have et Node.js-udviklingsmiljø opsat på din computer.

Du vil oprette et simpelt Node.js-script til at komprimere en fil og mappe til ZIP-format. Opret et nyt Node-projekt på din computer ved at køre følgende kommandoer:

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

Dernæst skal du installere Archiver-pakken i dit projekt. Løb npm installer arkiver --save i din terminal for at installere den. Når pakkeinstallationen er færdig, skal du oprette en ny fil i projektbiblioteket og navngive den efter dine præferencer, f.eks. app.js eller archiver.js.

Det fs modul håndterer filoperationer, mens Archiver-pakken vil håndtere komprimering af filer og mapper til ZIP-arkiver, hvorfor scriptet kræver begge moduler.

Oprettelse af ZIP-arkiver fra filer

Følgende kode er implementeringen af ​​en funktion, der accepterer en fil som et argument og opretter en komprimeret ZIP-version af filen.

konst arkiver = kræve('arkiver')
konst fs = kræve('fs')

// opret ZIP fra fil
konst createZipFromFile = (fil) => {
konst filePath = __dirname + '/' + fil
konst output = fs.createWriteStream (filsti + '.zip')
konst arkiv = arkiver('zip', {
zlib: { niveau: 9 } // sæt komprimeringsniveauet til det højeste
})

archive.pipe (output);
archive.file (filsti, { navn: fil })
archive.finalize()
}

Funktionen tager filnavnet på filen for at komprimere og genererer en outputfil med et lignende navn (med den eneste forskel er tilføjelsen af ​​ZIP-filtypenavnet).

Derefter genererer funktionen et nyt arkiv med komprimeringsniveauet sat til 9 (højest) og bruger rør funktion til at overføre outputstrømmene fra arkivet til input af outputfilen.

Det fil funktionen tilføjer en fil til arkivet. Den accepterer filstien som en parameter og en valgfri muligheder parameter, hvor du kan angive egenskaberne for filen i arkivet.

Det navn option angiver navnet på filen i arkivet. Hvis indstillingen ikke er angivet, når du tilføjer en fil til arkivet, placerer Archiver filen i arkivet baseret på dens oprindelige sti, hvilket bevarer mappestrukturen.

Men når det udtrykkeligt er angivet, tilføjer Archiver filen til arkivet uden dens oprindelige sti, hvilket giver mulighed for tilpasset navngivning og organisation i arkivet.

Oprettelse af ZIP-arkiver fra mapper

Processen med at oprette ZIP-arkiver fra mapper er ikke meget forskellig fra den for filer. Den største forskel er brugen af ​​Archiver-pakken vejviser funktion i modsætning til fil i den forrige funktion.

Nedenfor er implementeringen af ​​en funktion til at komprimere en mappe til et ZIP-arkiv.

// opret ZIP fra mappe
konst createZipFromFolder = (folder) => {
konst folderPath = __dirname + '/' + mappe
konst output = fs.createWriteStream (mappesti + '.zip')

konst arkiv = arkiver('zip', {
zlib: { niveau: 9 } // sæt komprimeringsniveauet til det højeste
})

archive.pipe (output)
archive.directory (mappesti, falsk)
archive.finalize()
}

Det vejviser funktion tager mappestien som sit første argument og et flag som sit andet argument. Flaget bestemmer placeringen af ​​mappen i arkivet.

Når flaget er sat til falsk, vil det resulterende arkiv kun indeholde indholdet af mappen, undtagen selve mappen. Men hvis flaget er sat til rigtigt, vil Archiver inkludere selve mappen i det genererede arkiv

Hvis du vil undgå at forurene det sted, hvor du udpakker dit arkiv med filer fra det komprimerede arkiv, bør du overveje at indstille flag mulighed for at rigtigt. Du kan dog indstille det til falsk, hvis det passer bedre til dine formål.

Sådan dekomprimeres filer i Node.js

Processen med at udpakke ZIP-filer i Node.js har flere tilgange, og flere biblioteker er tilgængelige til brug, men i denne artikel bruges Unzipper-pakken.

Kør følgende kommando i din terminal for at installere Unzipper-pakken i dit projekt.

npm installer unzipper --save

Efter installation af pakken skal du importere den til din kode og implementere ZIP-udtrækningsfunktionen vist i koden nedenfor:

konst oplåsning = kræve("lynlås")

//funktion til at udpakke ZIP-fil
konst extractZip = asynkron (fil) => {
konst filePath = __dirname + '/' + fil
konst outputPath = __dirnavn + '/ekstraheret'
vente fs.createReadStream (filsti)
.pipe (lynlås op. Uddrag({ sti: outputPath }))
.løfte()
}

Det ekstraherZip funktion er en asynkron funktion, der opretter en læsestrøm for at læse indholdet af ZIP-filen og udtrækker filen til den specificerede outputsti (den opretter udvundet mappe, hvis den ikke findes).

I tilfælde af dekomprimering eller udtrækning er der ikke behov for at definere forskellige funktioner for filer og mapper, da et ZIP-arkiv er en fil uanset indholdet i det.

Nedenfor er en funktion, du kan tilføje til applikationen, for at teste de funktioner, du har oprettet indtil videre:

(asynkronfungere () {
konst fil = 'test.pdf'
konst mappe = 'test_mappe'
konst zipfil = 'test.pdf.zip'
createZipFromFile (fil)
konsol.log('ZIP-arkiv blev oprettet fra fil')
createZipFromFolder (mappe)
konsol.log('ZIP-arkiv blev oprettet fra mappe')
vente extractZip (zipFile)
konsol.log('ZIP-arkiv blev udtrukket med succes')
}) ()

Alle de tidligere funktioner er JavaScript pile funktioner, men ovenstående funktion er anderledes, fordi den er en Umiddelbart påkaldt funktionsudtryk at indkapsler koden i det og udfører det med det samme.

Filkomprimering er gavnlig ved opbygning af effektive applikationer

Det bør altid være et mål at gøre dine applikationer så effektive, som de kan være, for at kunne betjene brugerne bedre og opretholde en behagelig brugeroplevelse.

I scenarier, hvor du skal overføre mange filer i din applikation, kan du overveje at komprimere og dekomprimere filerne, mens du sender. De fleste moderne programmeringssprog giver støtte til at komprimere og dekomprimere filer effektivt.