Folosiți pachetele Archiver și Unzipper pentru a comprima și decomprima fișierele din Node.js.

Arhivarea fișierelor este o activitate de zi cu zi în lumea modernă, deoarece oricine poate atesta avantajele oferite de comprimarea fișierelor sau folderelor în formate mai mici, portabile.

Formatul ZIP este unul dintre cele mai populare formate de arhivă utilizate în lumea calculatoarelor și este foarte recomandat alegere pentru oricine trebuie să convertească fișiere brute în arhive pentru o stocare mai bună, un transfer eficient sau orice altceva motiv.

Deci, de ce ar trebui să vă gândiți să vă comprimați fișierele și cum puteți să comprimați fișierele în ZIP și să le extrageți înapoi la starea inițială în mod programatic folosind Node.js?

De ce să comprimați fișierele?

De multe ori, fișierele și folderele devin foarte mari, iar partajarea sau transferul lor devine o problemă deoarece sunt fie prea mari pentru a fi stocate pe o unitate de stocare cu o anumită capacitate, fie durează prea mult să se încarce în cloud depozitare.

instagram viewer

În scenarii ca acesta și multe altele, ar trebui să comprimați astfel de fișiere sau foldere într-o dimensiune mult mai mică. Pe lângă transferul mai ușor de fișiere, alte motive pentru care ați putea lua în considerare comprimarea fișierelor includ:

  • Depozitare eficientă
  • Structura și organizarea fișierelor mai bune
  • Securitate (criptare fișiere și protecție prin parolă)
  • Integritatea fișierului
  • Versiune fișier

Ce sunt pachetele Node.js Archiver și Unzipper?

The Arhivar documentația oficială a pachetului descrie pachetul ca „o interfață de streaming pentru generarea de arhive”. Acest lucru implică faptul că pachetul Archiver oferă o bibliotecă de funcții care utilizează fluxurile Node.js pentru a crea arhive de fișiere comprimate.

Pachetul Archiver acceptă mai multe formate de arhivă în mod implicit, inclusiv ZIP, GZIP și TAR. Pachetul vă permite, de asemenea, să creați arhive din fișiere și directoare și să împărțiți arhive mari în părți mai mici (arhive cu mai multe volume). De asemenea, vă permite să excludeți sau să filtrați fișiere în timpul compresiei.

The Deschideți fermoarul pachetul este un pachet foarte eficient pentru extragerea arhivelor ZIP în Node.js. Pachetul oferă un API ușor de utilizat care permite dezvoltatorilor să extragă fișiere ZIP cu doar câteva linii de cod.

Pachetele Archiver și Unzipper sunt alegerile pentru acest tutorial, deoarece se integrează perfect cu Node.js. fs modul, asigurând compatibilitate fără probleme și simplitate.

Cum să comprimați fișierele în format ZIP în Node.js

Comprimarea fișierelor în format ZIP în Node.js este ușor ca în orice altă limbă, datorită pachetului Archiver. Pentru a crea arhive ZIP în Node.js în timp ce urmăriți această secțiune, aveți nevoie de un mediu de dezvoltare Node.js configurat pe computer.

Veți crea un script Node.js simplu pentru a comprima un fișier și un folder în format ZIP. Creați un nou proiect Node pe computer rulând următoarele comenzi:

mkdir node-zip-archiver
CD nod-zip-archiver
npm init -y

Apoi, trebuie să instalați pachetul Archiver în proiectul dvs. Alerga npm install archiver --save în terminalul dvs. pentru a-l instala. Când instalarea pachetului este finalizată, creați un fișier nou în directorul proiectului și denumiți-l conform preferințelor dvs., de ex. app.js sau archiver.js.

The fs modulul gestionează operațiunile cu fișiere, în timp ce pachetul Archiver se va ocupa de comprimarea fișierelor și folderelor în arhive ZIP, prin urmare, scriptul necesită ambele module.

Crearea arhivelor ZIP din fișiere

Următorul cod este implementarea unei funcții care acceptă un fișier ca argument și creează o versiune ZIP comprimată a fișierului.

const arhivator = cere('arhivar')
const fs = cere(„fs”)

// creează ZIP din fișier
const createZipFromFile = (fişier) => {
const filePath = __dirname + '/' + fișier
const output = fs.createWriteStream (filePath + „.zip”)
const arhiva = arhivator(„zip”, {
zlib: { nivel: 9 } // setează nivelul de compresie la cel mai ridicat
})

archive.pipe (ieșire);
archive.file (filePath, { Nume: fișier })
archive.finalize()
}

Funcția comprimă numele fișierului și generează un fișier de ieșire cu un nume similar (singura distincție fiind adăugarea extensiei fișierului ZIP).

Apoi, funcția generează o nouă arhivă cu nivelul de compresie setat la 9 (cel mai mare) și utilizează teava funcția de a transfera fluxurile de ieșire ale arhivei în intrarea fișierului de ieșire.

The fişier funcția adaugă un fișier la arhivă. Acceptă calea fișierului ca parametru și opțional Opțiuni parametru unde puteți specifica proprietățile fișierului din arhivă.

The Nume opțiunea desemnează numele fișierului din arhivă. Dacă opțiunea nu este specificată la adăugarea unui fișier în arhivă, Archiver plasează fișierul în arhivă pe baza căii sale originale, păstrând structura directorului.

Cu toate acestea, atunci când este furnizat în mod explicit, Archiver adaugă fișierul în arhivă fără calea sa originală, permițând denumirea și organizarea personalizată în arhivă.

Crearea arhivelor ZIP din foldere

Procesul de creare a arhivelor ZIP din foldere nu este foarte diferit de cel pentru fișiere. Principala diferență este utilizarea pachetului Archiver director funcţia spre deosebire de fişier în funcția anterioară.

Mai jos este implementarea unei funcții de comprimare a unui folder într-o arhivă ZIP.

// creează ZIP din folder
const createZipFromFolder = (pliant) => {
const folderPath = __dirname + '/' + folder
const output = fs.createWriteStream (folderPath + „.zip”)

const arhiva = arhivator(„zip”, {
zlib: { nivel: 9 } // setează nivelul de compresie la cel mai ridicat
})

archive.pipe (ieșire)
archive.directory (folderPath, fals)
archive.finalize()
}

The director funcția ia calea folderului ca prim argument și un flag ca al doilea argument. Steagul determină plasarea folderului în arhivă.

Când steagul este setat la fals, arhiva rezultată va conține doar conținutul folderului, excluzând folderul în sine. Dar dacă steagul este setat la Adevărat, Archiver va include folderul în sine în arhiva generată

Dacă doriți să evitați contaminarea locației în care extrageți arhiva cu fișiere din arhiva comprimată, ar trebui să vă gândiți la setarea steag opțiunea pentru Adevărat. Cu toate acestea, îl puteți seta la fals, dacă se potrivește mai bine scopurilor dvs.

Cum să decomprimați fișierele în Node.js

Procesul de extragere a fișierelor ZIP în Node.js are mai multe abordări și mai multe biblioteci sunt disponibile pentru utilizare, dar în acest articol este folosit pachetul Unzipper.

Rulați următoarea comandă în terminalul dvs. pentru a instala pachetul Unzipper în proiectul dvs.

npm install unzipper --save

După instalarea pachetului, importați-l în codul dvs. și implementați funcția de extragere ZIP afișată în codul de mai jos:

const deschide fermoar = cere("deschide fermoarul")

//funcție de extragere a fișierului ZIP
const extractZip = asincron (fișier) => {
const filePath = __dirname + '/' + fișier
const outputPath = __dirname + '/extras'
așteaptă fs.createReadStream (filePath)
.pipe (deschide fermoarul. Extrage({ cale: calea de ieșire }))
.promisiune()
}

The extractZip funcția este o funcție asincronă care creează un flux de citire pentru a citi conținutul fișierului ZIP și extrage fișierul în calea de ieșire specificată (creează extrase folder dacă nu există).

În cazul decomprimării sau extragerii, nu este nevoie să definiți diferite funcții pentru fișiere și foldere, deoarece o arhivă ZIP este un fișier, indiferent de conținutul acesteia.

Mai jos este o funcție pe care o puteți adăuga la aplicație, pentru a testa funcțiile pe care le-ați creat până acum:

(asincronfuncţie () {
const fisier = „test.pdf”
const folder = „dosar_test”
const zipFile = „test.pdf.zip”
createZipFromFile (fișier)
consolă.Buturuga(„Arhiva ZIP creată cu succes din fișier”)
createZipFromFolder (dosar)
consolă.Buturuga(„Arhiva ZIP creată cu succes din folder”)
așteaptă extractZip (fișier zip)
consolă.Buturuga(„Arhiva ZIP extrasă cu succes”)
}) ()

Toate funcțiile anterioare sunt Funcții săgeți JavaScript, dar funcția de mai sus este diferită deoarece este un Expresia funcției invocată imediat acea încapsulează codul în cadrul acestuia și îl execută imediat.

Comprimarea fișierelor este benefică în construirea de aplicații eficiente

Ar trebui să fie întotdeauna un obiectiv să vă faceți aplicațiile cât mai eficiente pentru a servi mai bine utilizatorii și pentru a menține o experiență plăcută de utilizator.

În scenariile în care trebuie să transferați o mulțime de fișiere în cadrul aplicației dvs., luați în considerare comprimarea și decomprimarea fișierelor în timpul transmiterii. Majoritatea limbajelor de programare moderne oferă suport pentru comprimarea și decomprimarea eficientă a fișierelor.