Comment télécharger des fichiers avec Node.js

Comment télécharger des fichiers avec Node.js

Le téléchargement de fichiers sur le stockage local plutôt que de les conserver dans le stockage en nuage présente plusieurs avantages. Il s’agit notamment d’un accès simplifié, d’un accès sans connexion Internet et d’une propriété complète de vos données.

Vous pouvez télécharger des fichiers uniques et multiples à l’aide des modules Node.js intégrés. Vous pouvez également utiliser une bibliothèque tierce à la place, pour obtenir les mêmes résultats.

Téléchargement de fichiers sans bibliothèque tierce

Pour télécharger un fichier à l’aide de Node.js, sans l’aide de packages tiers, vous aurez besoin de trois modules Node.js principaux : fs , https et path .

Le module fs prend en charge de nombreuses tâches de fichiers, notamment lire, créer, mettre à jour, supprimer et renommer. Le module https crée un serveur Web pour gérer les requêtes et fournir des réponses. Le module de chemin fournit un moyen d’interagir avec les chemins de répertoire et de fichier.

À l’aide de ces modules, vous pouvez envoyer une requête HTTP GET pour accéder à une ressource de fichier à partir d’un serveur Web, puis effectuer une copie de la ressource dans votre système local.

Pour commencer, importez les modules requis :

const https = require('https');
const fs = require('fs');
const path = require('path');

Vous devrez utiliser le nom de fichier de l’URL comme bon nom par défaut pour l’enregistrer. Vous pouvez utiliser la méthode .basename() du module path pour obtenir le nom d’un fichier à partir de son URL. Cette méthode prend un argument de chemin et renvoie la dernière partie d’un chemin.

Par example:

const filename = path.basename(url);

Ensuite, demandez le fichier au serveur en appelant la méthode https.get() . Cette méthode prend l’URL comme premier argument et une fonction de rappel pour la réponse comme deuxième argument

Transmettez la variable url comme premier argument, puis une fonction de rappel pour le traitement lorsque cette méthode reçoit un flux de réponse :

https.get(url, (res) => {
})

Dans la fonction de rappel, vous pouvez utiliser la méthode fs.createWriteStream() pour créer un nouveau flux inscriptible, en passant la variable filename comme argument.

Par example:

const fileStream = fs.createWriteStream(filename);
res.pipe(fileStream);

La méthode createWriteStream() facilite le processus d’écriture de données dans un fichier, en particulier lorsque vous manipulez de gros blocs de données.

La méthode pipe() envoie ensuite le flux de données de réponse GET à l’ objet fileStream .

Pour consigner un message dans la console une fois que le script a terminé de télécharger le fichier, attachez un émetteur d’événement .on() à la variable fileStream :

fileStream.on('finish', () => {
  fileStream.close();
  console.log('Download finished');
});

L’objet fileStream émet un événement finish lorsqu’il a écrit toutes les données dans le fichier. Attrapez ceci via la méthode .on() et fournissez une fonction de rappel pour fermer le fileStream et consigner un message dans la console.

Pour une meilleure exécution et une réutilisation efficace des scripts, encapsulez ce code dans une fonction qui prend l’URL comme argument :

function downloadFile(url) {
    const filename = path.basename(url);

    https.get(url, (res) => {
        const fileStream = fs.createWriteStream(filename);
        res.pipe(fileStream);


        fileStream.on('finish', () => {
            fileStream.close();
            console.log('Download finished')
        });
    })
}

Pour exécuter la fonction, appelez-la et transmettez l’URL du fichier que vous souhaitez télécharger :

downloadFile([file url]);

Pour exécuter le script, ouvrez votre terminal et saisissez node suivi du nom du fichier JavaScript :

node [script name]

Ce script téléchargera l’URL du fichier que vous avez transmis à la fonction downloadFile() et l’enregistrera dans votre répertoire de travail.

Gestion des erreurs lors du téléchargement de fichiers

Dans Node.js, des erreurs spécifiques telles que l’écriture dans le flux, une mauvaise connexion au service ou des problèmes avec le fichier lui-même peuvent survenir lors du téléchargement de fichiers. Il est crucial de consigner les messages d’erreur lorsque ces erreurs se produisent pour pouvoir résoudre le problème.

Essayer/attraper le bloc

Un bloc try-catch est une structure de programmation qui vous permet de gérer les erreurs et les exceptions potentielles dans votre code.

Les blocs try-and-catch constituent le bloc try…catch. Le code du bloc try s’exécute en premier et le code du bloc catch s’exécute si le bloc try lève une exception.

try {
    downloadFile([file url]);
} catch (error) {
    console.log(error);
}

Utilisez un bloc try/catch pour vous assurer que vous pouvez intercepter toutes les erreurs liées au téléchargement. Vous pouvez ensuite gérer toute erreur si nécessaire, par exemple en l’enregistrant sur la console ou en réessayant le téléchargement.

Code d’état de la réponse HTTP

Les codes d’état des réponses HTTP indiquent si une requête HTTP particulière a été exécutée avec succès.

Par example:

https.get(url, (res) => {
    const code = res.statusCode();
    console.log(code)
    const fileStream = fs.createWriteStream(filename);
});

Si la demande renvoie un code d’état en dehors de la plage de réussite, 200-299 , il y a eu un problème avec la demande. Vérifiez le code d’état HTTP, puis recherchez la signification du code d’état pour traiter l’erreur si nécessaire.

Téléchargement de plusieurs fichiers

Vous pouvez télécharger plusieurs fichiers simultanément en transmettant les URL des fichiers en tant qu’arguments lors de l’exécution de node [script name] . Pour effectuer cette tâche, vous devez modifier certaines parties de votre script.

En JavaScript, les arguments passés avec la commande node sont disponibles dans process.argv, une propriété de l’objet global Node.js. Cette propriété renvoie un tableau des arguments de la ligne de commande. Le premier élément de ce tableau doit être node , la commande réelle que vous exécutez. Le second sera le nom du fichier de script, puis chaque argument suivant doit être une URL.

Pour télécharger plusieurs fichiers à la fois, enregistrez le tableau de process.argv dans une variable. Exécutez ensuite la méthode slice() pour supprimer les deux premiers éléments, qui ne sont pas des URL :

const args = process.argv;
const urls = args.slice(2);

La méthode slice() crée un nouveau tableau à partir des éléments sélectionnés dans un tableau. Cette méthode sélectionne d’un début spécifié à une fin spécifiée (non inclusive).

Dans ce cas, la transmission d’une valeur de 2 supprime le nom de commande du nœud et votre nom de fichier de script .

Enfin, en utilisant la méthode map de JavaScript, passez chaque élément du tableau urls à downloadFile() :

urls.map(url =>{
    downloadFile(url)
});

Pour exécuter le code, entrez la commande node avec le nom de votre fichier JavaScript et les URL que vous souhaitez télécharger :

node [script name] url1 url2 url3

Utilisation d’une bibliothèque tierce

Vous pouvez également télécharger des fichiers à l’aide d’une bibliothèque tierce comme le package de téléchargement npm.

Dans votre répertoire de scripts, exécutez la commande npm suivante pour installer le package de téléchargement :

npm install download

Exigez le package téléchargé dans votre script, puis enregistrez les arguments de ligne de commande dans un tableau :

const download = require('download');
const args = process.argv;
const urls = args.slice(2);

Vous pouvez maintenant utiliser la bibliothèque de téléchargement pour télécharger des fichiers . Vous pouvez le faire de plusieurs manières en fonction de votre objectif particulier.

Par example:

async function downloadFile(urls){
await Promise.all(urls.map((url) => download(url, "files")))
};

downloadFile(urls);

Déclarez la fonction downloadFile comme async , et créez une promesse d’attendre que la tâche particulière soit terminée avec le mot-clé await . Mappez le tableau urls à la fonction de téléchargement et transmettez le nom d’un dossier local — «  files «  , dans ce cas — pour stocker les fichiers.

Téléchargement de fichiers sur le système de fichiers local

Les fonctions intégrées de Node, comme fs et https, facilitent l’écriture d’un téléchargeur de fichiers. Pour le rendre encore plus simple, vous pouvez utiliser un module tiers comme download.

Les deux méthodes vous permettent de télécharger des fichiers à partir d’un serveur distant et de les enregistrer dans le système de fichiers local. Vous devez choisir la meilleure méthode pour vos besoins et l’utiliser dans votre prochaine application Node.js.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *