Utilizza i pacchetti Archiver e Unzipper per comprimere e decomprimere i file in Node.js.

L'archiviazione di file è un'attività quotidiana nel mondo moderno poiché tutti possono attestare i vantaggi offerti dalla compressione di file o cartelle in formati più piccoli e portatili.

Il formato ZIP è uno dei formati di archivio più popolari utilizzati nel mondo dell'informatica ed è altamente raccomandato scelta per chiunque abbia bisogno di convertire file grezzi in archivi per una migliore archiviazione, un trasferimento efficiente o qualsiasi altro motivo.

Quindi, perché dovresti considerare di comprimere i tuoi file e come puoi comprimere i file in ZIP ed estrarli al loro stato originale a livello di codice usando Node.js?

Perché comprimere i file?

Molte volte file e cartelle diventano molto grandi e condividerli o trasferirli diventa un problema perché lo sono o sono troppo grandi per essere archiviati su un'unità di archiviazione di una capacità specifica oppure impiegano troppo tempo per essere caricati nel cloud magazzinaggio.

instagram viewer

In scenari come questo e molti altri, dovresti comprimere tali file o cartelle in una dimensione molto più piccola. Oltre al trasferimento di file più semplice, altri motivi per cui potresti considerare di comprimere i tuoi file includono:

  • Stoccaggio efficiente
  • Migliore struttura e organizzazione dei file
  • Sicurezza (crittografia dei file e protezione con password)
  • Integrità del file
  • Controllo delle versioni dei file

Cosa sono i pacchetti Node.js Archiver e Unzipper?

IL Archiviatore la documentazione ufficiale del pacchetto descrive il pacchetto come "un'interfaccia di streaming per la generazione di archivi". Ciò implica che il pacchetto Archiver fornisce una libreria di funzioni che sfruttano i flussi Node.js per creare archivi di file compressi.

Il pacchetto Archiver supporta più formati di archivio per impostazione predefinita, inclusi ZIP, GZIP e TAR. Il pacchetto consente inoltre di creare archivi da file e directory e dividere archivi di grandi dimensioni in parti più piccole (archivi multivolume). Consente inoltre di escludere o filtrare i file durante la compressione.

IL Unzipper package è un pacchetto molto efficiente per l'estrazione di archivi ZIP in Node.js. Il pacchetto fornisce un'API di facile utilizzo che consente agli sviluppatori di estrarre file ZIP con poche righe di codice.

I pacchetti Archiver e Unzipper sono le scelte per questo tutorial perché si integrano perfettamente con Node.js fs modulo, garantendo compatibilità e semplicità fluide.

Come comprimere i file in formato ZIP in Node.js

Compressione dei file al formato ZIP in Node.js è facile proprio come in qualsiasi altra lingua, grazie al pacchetto Archiver. Per creare archivi ZIP in Node.js mentre segui questa sezione, hai bisogno di un ambiente di sviluppo Node.js configurato sul tuo computer.

Creerai un semplice script Node.js per comprimere un file e una cartella in formato ZIP. Crea un nuovo progetto Node sul tuo computer eseguendo i seguenti comandi:

mkdir node-zip-archiver
CD archiviatore-zip-nodo
npm init -y

Successivamente, è necessario installare il pacchetto Archiver nel progetto. Correre npm installa archiviatore --save nel tuo terminale per installarlo. Quando l'installazione del pacchetto è completa, crea un nuovo file nella directory del progetto e assegnagli un nome in base alle tue preferenze, ad es. app.js O archiver.js.

IL fs module gestisce le operazioni sui file, mentre il pacchetto Archiver gestirà la compressione di file e cartelle in archivi ZIP, quindi lo script richiede entrambi i moduli.

Creazione di archivi ZIP da file

Il codice seguente è l'implementazione di una funzione che accetta un file come argomento e crea una versione ZIP compressa del file.

cost archiviatore = richiedere('archiviatore')
cost fs = richiedere('fs')

// crea ZIP dal file
cost createZipFromFile = (file) => {
cost filePath = __dirname + '/' + fascicolo
cost output = fs.createWriteStream (filePath + '.cerniera lampo')
cost archivio = archiviatore('cerniera lampo', {
zlib: { livello: 9 } // imposta il livello di compressione al massimo
})

archivio.pipe (uscita);
archivio.file (percorsofile, { nome: file })
archivio.finalizzare()
}

La funzione prende il nome file del file da comprimere e genera un file di output con un nome simile (con l'unica differenza che è l'aggiunta dell'estensione del file ZIP).

Quindi, la funzione genera un nuovo archivio con il livello di compressione impostato su 9 (il più alto) e utilizza il file tubo funzione per trasferire i flussi di output dell'archivio nell'input del file di output.

IL file funzione aggiunge un file all'archivio. Accetta il percorso del file come parametro e facoltativo opzioni parametro dove è possibile specificare le proprietà del file nell'archivio.

IL nome opzione designa il nome del file all'interno dell'archivio. Se l'opzione non è specificata quando si aggiunge un file all'archivio, Archiver posiziona il file all'interno dell'archivio in base al suo percorso originale, preservando la struttura della directory.

Tuttavia, quando viene fornito in modo esplicito, Archiver aggiunge il file all'archivio senza il suo percorso originale, consentendo la denominazione e l'organizzazione personalizzate all'interno dell'archivio.

Creazione di archivi ZIP da cartelle

Il processo di creazione di archivi ZIP dalle cartelle non è molto diverso da quello per i file. La differenza principale è l'uso del pacchetto Archiver directory funzione al contrario di file nella funzione precedente.

Di seguito è riportata l'implementazione di una funzione per comprimere una cartella in un archivio ZIP.

// crea ZIP dalla cartella
cost createZipFromFolder = (cartella) => {
cost folderPath = __dirname + '/' + cartella
cost output = fs.createWriteStream (percorsocartella + '.cerniera lampo')

cost archivio = archiviatore('cerniera lampo', {
zlib: { livello: 9 } // imposta il livello di compressione al massimo
})

archivio.pipe (uscita)
archivio.directory (percorsocartella, falso)
archivio.finalizzare()
}

IL directory La funzione accetta il percorso della cartella come primo argomento e un flag come secondo argomento. Il flag determina la posizione della cartella all'interno dell'archivio.

Quando il flag è impostato su falso, l'archivio risultante conterrà solo il contenuto della cartella, esclusa la cartella stessa. Ma se la bandiera è impostata su VERO, Archiver includerà la cartella stessa nell'archivio generato

Se vuoi evitare di contaminare la posizione in cui stai estraendo il tuo archivio con file dall'archivio compresso, dovresti pensare a impostare il bandiera opzione a VERO. Tuttavia, puoi impostarlo su falso, se meglio si adatta ai tuoi scopi.

Come decomprimere i file in Node.js

Il processo di estrazione dei file ZIP in Node.js ha più approcci e diverse librerie sono disponibili per l'uso, ma in questo articolo viene utilizzato il pacchetto Unzipper.

Esegui il seguente comando nel tuo terminale per installare il pacchetto Unzipper nel tuo progetto.

npm install unzipper --save

Dopo aver installato il pacchetto, importalo nel tuo codice e implementa la funzione di estrazione ZIP mostrata nel codice seguente:

cost decomprimere = richiedere("decomprimere")

//funzione per estrarre il file ZIP
cost estrarreZip = asincrono (file) => {
cost filePath = __dirname + '/' + fascicolo
cost outputPath = __dirname + '/estratto'
attendere fs.createReadStream (filePath)
.pipe (unzipper. Estratto({ sentiero: percorso di uscita }))
.promettere()
}

IL estrattoZip è una funzione asincrona che crea un flusso di lettura per leggere il contenuto del file ZIP ed estrae il file nel percorso di output specificato (crea il estratto cartella se non esiste).

Nel caso di decompressione o estrazione, non è necessario definire funzioni diverse per file e cartelle, poiché un archivio ZIP è un file indipendentemente dal contenuto in esso contenuto.

Di seguito è una funzione che puoi aggiungere all'applicazione, per testare le funzioni che hai creato finora:

(asincronofunzione () {
cost file = 'prova.pdf'
cost cartella = 'test_cartella'
cost zipFile = 'prova.pdf.zip'
createZipFromFile (file)
consolare.tronco d'albero('Archivio ZIP creato con successo dal file')
createZipFromFolder (cartella)
consolare.tronco d'albero('Archivio ZIP creato con successo dalla cartella')
attendere estrarreZip (zipFile)
consolare.tronco d'albero('Archivio ZIP estratto con successo')
}) ()

Tutte le funzioni precedenti lo sono Funzioni freccia JavaScript, ma la funzione precedente è diversa perché è un Espressione di funzione richiamata immediatamente Quello incapsula il codice al suo interno e lo esegue immediatamente.

La compressione dei file è vantaggiosa per la creazione di applicazioni efficienti

Dovrebbe essere sempre un obiettivo rendere le tue applicazioni il più efficienti possibile per servire meglio gli utenti e mantenere un'esperienza utente piacevole.

Negli scenari in cui è necessario trasferire molti file all'interno dell'applicazione, valutare la possibilità di comprimere e decomprimere i file durante la trasmissione. La maggior parte dei linguaggi di programmazione moderni fornisce supporto per comprimere e decomprimere i file in modo efficiente.