Utilisez les packages Archiver et Unzipper pour compresser et décompresser les fichiers dans Node.js.

L'archivage de fichiers est une activité quotidienne dans le monde moderne, car tout le monde peut attester des avantages offerts par la compression de fichiers ou de dossiers dans des formats plus petits et portables.

Le format ZIP est l'un des formats d'archives les plus populaires utilisés dans le monde de l'informatique, et il est fortement recommandé choix pour tous ceux qui ont besoin de convertir des fichiers bruts en archives pour un meilleur stockage, un transfert efficace ou tout autre raison.

Alors, pourquoi devriez-vous envisager de compresser vos fichiers, et comment pouvez-vous compresser des fichiers au format ZIP et les extraire à leur état d'origine par programmation à l'aide de Node.js ?

Pourquoi compresser des fichiers?

Souvent, les fichiers et les dossiers deviennent très volumineux et leur partage ou leur transfert devient un problème car ils sont soit trop volumineux pour être stockés sur un disque de stockage d'une capacité spécifique, soit ils prennent trop de temps à télécharger sur le cloud stockage.

instagram viewer

Dans des scénarios comme celui-ci et bien d'autres, vous devez compresser ces fichiers ou dossiers dans une taille beaucoup plus petite. Outre un transfert de fichiers plus facile, d'autres raisons pour lesquelles vous pourriez envisager de compresser vos fichiers incluent :

  • Stockage efficace
  • Meilleure structure et organisation des fichiers
  • Sécurité (cryptage des fichiers et protection par mot de passe)
  • Intégrité des fichiers
  • Gestion des versions de fichiers

Que sont les packages d'archivage et de décompression Node.js?

Le Archiveur La documentation officielle du package décrit le package comme "une interface de streaming pour la génération d'archives". Cela implique que le package Archiver fournit une bibliothèque de fonctions qui exploitent les flux Node.js pour créer des archives de fichiers compressés.

Le package Archiver prend en charge plusieurs formats d'archive par défaut, notamment ZIP, GZIP et TAR. Le package vous permet également de créer des archives à partir de fichiers et de répertoires et de diviser de grandes archives en parties plus petites (archives multi-volumes). Il vous permet également d'exclure ou de filtrer des fichiers lors de la compression.

Le Décompresseur package est un package très efficace pour extraire des archives ZIP dans Node.js. Le package fournit une API facile à utiliser qui permet aux développeurs d'extraire des fichiers ZIP avec seulement quelques lignes de code.

Les packages Archiver et Unzipper sont les choix pour ce tutoriel car ils s'intègrent de manière transparente avec Node.js fs module, assurant une compatibilité fluide et la simplicité.

Comment compresser des fichiers au format ZIP dans Node.js

Compression de fichiers au format ZIP dans Node.js est facile comme dans n'importe quel autre langage, grâce au package Archiver. Pour créer des archives ZIP dans Node.js tout en suivant cette section, vous avez besoin d'un environnement de développement Node.js configuré sur votre ordinateur.

Vous allez créer un simple script Node.js pour compresser un fichier et un dossier au format ZIP. Créez un nouveau projet Node sur votre ordinateur en exécutant les commandes suivantes :

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

Ensuite, vous devez installer le package Archiver dans votre projet. Courir archiveur d'installation npm --save dans votre terminal pour l'installer. Lorsque l'installation du package est terminée, créez un nouveau fichier dans le répertoire du projet et nommez-le selon vos préférences, par ex. app.js ou archiver.js.

Le fs module gère les opérations sur les fichiers, tandis que le package Archiver gère la compression des fichiers et des dossiers dans les archives ZIP, par conséquent, le script nécessite les deux modules.

Création d'archives ZIP à partir de fichiers

Le code suivant est l'implémentation d'une fonction qui accepte un fichier comme argument et crée une version ZIP compressée du fichier.

constante archiveur = exiger('archiver')
constante fs = exiger('fs')

// crée un ZIP à partir du fichier
constante createZipFromFile = (déposer) => {
constante filePath = __dirname + '/' + fichier
constante sortie = fs.createWriteStream (filePath + '.zipper')
constante archive = archiveur('zipper', {
zlib: { niveau: 9 } // définit le niveau de compression au plus haut
})

archive.pipe (sortie);
archive.file (filePath, { nom: déposer })
archive.finalize()
}

La fonction prend le nom de fichier du fichier à compresser et génère un fichier de sortie avec un nom similaire (avec la seule distinction étant l'ajout de l'extension de fichier ZIP).

Ensuite, la fonction génère une nouvelle archive avec le niveau de compression défini sur 9 (le plus élevé) et utilise le tuyau fonction pour transférer les flux de sortie de l'archive dans l'entrée du fichier de sortie.

Le déposer La fonction ajoute un fichier à l'archive. Il accepte le chemin du fichier comme paramètre et un facultatif choix paramètre où vous pouvez spécifier les propriétés du fichier dans l'archive.

Le nom L'option désigne le nom du fichier dans l'archive. Si l'option n'est pas spécifiée lors de l'ajout d'un fichier à l'archive, l'Archiveur place le fichier dans l'archive en fonction de son chemin d'accès d'origine, en préservant la structure du répertoire.

Cependant, lorsqu'il est explicitement fourni, Archiver ajoute le fichier à l'archive sans son chemin d'accès d'origine, ce qui permet une dénomination et une organisation personnalisées au sein de l'archive.

Création d'archives ZIP à partir de dossiers

Le processus de création d'archives ZIP à partir de dossiers n'est pas très différent de celui des fichiers. La principale différence est l'utilisation du package Archiver annuaire fonction par opposition à déposer dans la fonction précédente.

Vous trouverez ci-dessous l'implémentation d'une fonction pour compresser un dossier dans une archive ZIP.

// crée un ZIP à partir du dossier
constante createZipFromFolder = (dossier) => {
constante chemin_dossier = __dirname + '/' + dossier
constante sortie = fs.createWriteStream (chemin_dossier + '.zipper')

constante archive = archiveur('zipper', {
zlib: { niveau: 9 } // définit le niveau de compression au plus haut
})

archive.pipe (sortie)
archive.directory (chemindossier, FAUX)
archive.finalize()
}

Le annuaire La fonction prend le chemin du dossier comme premier argument et un indicateur comme deuxième argument. L'indicateur détermine l'emplacement du dossier dans l'archive.

Lorsque le drapeau est défini sur FAUX, l'archive résultante ne contiendra que le contenu du dossier, à l'exclusion du dossier lui-même. Mais si le drapeau est défini sur vrai, Archiver inclura le dossier lui-même dans l'archive générée

Si vous voulez éviter de contaminer l'emplacement où vous extrayez votre archive avec des fichiers de l'archive compressée, vous devriez penser à définir le paramètre drapeau possibilité de vrai. Cependant, vous pouvez le régler sur FAUX, si cela convient mieux à vos besoins.

Comment décompresser des fichiers dans Node.js

Le processus d'extraction de fichiers ZIP dans Node.js a plusieurs approches et plusieurs bibliothèques sont disponibles, mais dans cet article, le package Unzipper est utilisé.

Exécutez la commande suivante dans votre terminal pour installer le package Unzipper dans votre projet.

npm installer le décompresseur --save

Après avoir installé le package, importez-le dans votre code et implémentez la fonction d'extraction ZIP indiquée dans le code ci-dessous :

constante décompresseur = exiger("décompresser")

//fonction pour extraire le fichier ZIP
constante extraitZip = asynchrone (fichier) => {
constante filePath = __dirname + '/' + fichier
constante outputPath = __dirname + '/extrait'
attendre fs.createReadStream (filePath)
.pipe (décompresseur. Extrait({ chemin: chemin_sortie }))
.promesse()
}

Le extraitZip est une fonction asynchrone qui crée un flux de lecture pour lire le contenu du fichier ZIP et extrait le fichier vers le chemin de sortie spécifié (il crée le extrait dossier s'il n'existe pas).

Dans le cas de la décompression ou de l'extraction, il n'est pas nécessaire de définir des fonctions différentes pour les fichiers et les dossiers, car une archive ZIP est un fichier quel que soit son contenu.

Vous trouverez ci-dessous une fonction que vous pouvez ajouter à l'application, pour tester les fonctions que vous avez créées jusqu'à présent :

(asynchronefonction () {
constante fichier = 'test.pdf'
constante dossier = 'dossier_test'
constante zipFichier = 'test.pdf.zip'
createZipFromFile (fichier)
console.enregistrer("L'archive ZIP a été créée avec succès à partir du fichier")
createZipFromFolder (dossier)
console.enregistrer("L'archive ZIP a été créée avec succès à partir du dossier")
attendre extractZip (fichier zip)
console.enregistrer("Archive ZIP extraite avec succès")
}) ()

Toutes les fonctions précédentes sont Fonctions fléchées JavaScript, mais la fonction ci-dessus est différente car il s'agit d'un Expression de fonction immédiatement invoquée ce encapsule le code en son sein et l'exécute immédiatement.

La compression de fichiers est bénéfique pour créer des applications efficaces

L'objectif doit toujours être de rendre vos applications aussi efficaces que possible afin de mieux servir les utilisateurs et de maintenir une expérience utilisateur agréable.

Dans les scénarios où vous devez transférer un grand nombre de fichiers dans votre application, pensez à compresser et décompresser les fichiers lors de la transmission. La plupart des langages de programmation modernes prennent en charge la compression et la décompression efficaces des fichiers.