Maison >interface Web >Questions et réponses frontales >Comment télécharger des fichiers dans nodejs

Comment télécharger des fichiers dans nodejs

WBOY
WBOYoriginal
2023-05-11 20:29:084335parcourir

Node.js est un runtime JavaScript multiplateforme open source qui s'exécute dans un environnement d'exécution JavaScript capable d'exécuter du code JavaScript côté serveur. Node.js est largement utilisé pour développer des applications Web hautes performances et évolutives. Parmi elles, le téléchargement de fichiers est l'une des fonctions de base du site Web, et Node.js peut également facilement implémenter la fonction de téléchargement de fichiers. Cet article détaillera comment télécharger des fichiers dans Node.js.

1. Utilisez le module HTTP pour télécharger des fichiers

Dans Node.js, vous pouvez utiliser le module HTTP pour télécharger des fichiers. Le module HTTP est l'un des modules principaux de Node.js et fournit des API pour créer des clients et des serveurs HTTP.

  1. Étapes de base pour télécharger des fichiers

Pour télécharger des fichiers, vous devez suivre les étapes de base suivantes :

(1) Créez une requête HTTP.

(2) Envoyer une requête HTTP.

(3) Écrivez la réponse dans le fichier.

Ce qui suit est le code de base :

const http = require('http');
const fs = require('fs');

const fileUrl = 'http://example.com/file.pdf';
const filePath = './file.pdf';

const request = http.get(fileUrl, (response) => {
  const fileStream = fs.createWriteStream(filePath);
  response.pipe(fileStream);
});

request.on('error', (err) => {
  console.error(`请求下载文件出错: ${err.message}`);
});

request.end();

Dans le code ci-dessus, nous créons d'abord une requête HTTP via la méthode get du module HTTP. Dans la fonction de rappel de la requête, nous créons un flux de fichiers inscriptible et écrivons la réponse dans le flux de fichiers via un canal pour écrire le fichier sur le disque.

  1. Gestion de la progression du téléchargement

Pour les téléchargements de fichiers volumineux, il est très important de connaître la progression du téléchargement. Nous pouvons utiliser l'en-tête Content-Length intégré pour obtenir la taille du fichier, et l'événement progress intégré pour suivre la progression du téléchargement. Voici un exemple : Content-Length头来获得文件的大小,并使用内置的progress事件来跟踪下载的进度。下面是一个例子:

const http = require('http');
const fs = require('fs');

const url = 'http://example.com/file.zip';
const filePath = './file.zip';

http.get(url, (response) => {
  const contentLength = parseInt(response.headers['content-length']);
  let downloadedLength = 0;

  response.pipe(fs.createWriteStream(filePath));

  response.on('data', (chunk) => {
    downloadedLength += chunk.length;
    const percent = downloadedLength / contentLength * 100;
    console.log(`${percent}% downloaded`);
  });

  response.on('end', () => {
    console.log('下载完成');
  });
}).on('error', (err) => {
  console.error(`请求下载文件出错: ${err.message}`);
});

在上面的代码中,我们使用内置的data事件来跟踪下载的进度,并使用Content-Length头来计算下载的百分比。当下载完成时,我们输出“下载完成”的消息。

  1. 处理重定向

有时,文件下载链接可能会被重定向。我们可以检查响应的状态码是否为301或302,并使用Location头来获取重定向的链接。下面是示例代码:

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

function downloadFile(url, filePath) {
  const httpClient = url.startsWith('https') ? https : http;

  httpClient.get(url, (response) => {
    const { statusCode } = response;

    if (statusCode === 301 || statusCode === 302) {
      console.warn(`文件重定向: ${response.headers.location}`);
      downloadFile(response.headers.location, filePath);
      return;
    }

    if (statusCode !== 200) {
      console.error(`请求下载文件出错: 状态码 ${statusCode}`);
      return;
    }

    response.pipe(fs.createWriteStream(filePath)).on('close', () => {
      console.log('下载完成');
    });
  }).on('error', (err) => {
    console.error(`请求下载文件出错: ${err.message}`);
  });
}

const url = 'http://example.com/file.zip';
const filePath = './file.zip';

downloadFile(url, filePath);

在上面的代码中,我们使用httpClient变量来检查协议(http或https),并使用statusCode来检查响应的状态码。如果是301或302,则输出重定向的消息并重新下载文件。如果不是200,则输出错误消息。

二、使用Request模块下载文件

除了HTTP模块之外,Node.js中还有一些流行的第三方模块可以用来下载文件,其中最受欢迎的是Request模块。Request模块是一个简单的、强大的、人性化的HTTP客户端,由Mikeal Rogers创建。

  1. 安装Request模块

要使用Request模块进行文件下载,首先需要安装它。可以在命令行中执行以下命令进行安装:

npm install request --save
  1. 下载文件的基本步骤

使用Request模块下载文件的基本步骤与使用HTTP模块类似。下面是一个简单的例子:

const request = require('request');
const fs = require('fs');

const url = 'http://example.com/file.zip';
const filePath = './file.zip';

request(url)
  .pipe(fs.createWriteStream(filePath))
  .on('finish', () => {
    console.log('下载完成');
  })
  .on('error', (err) => {
    console.error(`请求下载文件出错: ${err.message}`);
  });

在上面的代码中,我们使用request方法来创建HTTP请求,并将响应通过管道的方式写入一个文件流中。当下载完成时,我们输出“下载完成”的消息。

  1. 处理下载进度

要处理下载进度,可以使用request方法返回的请求对象。可以使用内置的Content-Length头来获取文件的大小。此外,Request模块提供了一个内置的progress事件,使我们可以跟踪下载的进度。下面是一个例子:

const request = require('request');
const fs = require('fs');

const url = 'http://example.com/file.zip';
const filePath = './file.zip';

const fileStream = fs.createWriteStream(filePath);
let downloadedLength = 0;

request(url)
  .on('response', (response) => {
    const contentLength = parseInt(response.headers['content-length']);
    console.log(`文件大小: ${(contentLength / 1024 / 1024).toFixed(2)} MB`);

    response.on('data', (data) => {
      downloadedLength += data.length;
      const percent = downloadedLength / contentLength * 100;
      console.log(`${percent.toFixed(2)}% downloaded`);
    });
  })
  .pipe(fileStream)
  .on('finish', () => {
    console.log('下载完成');
  })
  .on('error', (err) => {
    console.error(`请求下载文件出错: ${err.message}`);
  });

在上面的代码中,我们使用response事件来获得文件的大小,并使用内置的data事件来计算和输出下载的百分比。

  1. 处理重定向

与HTTP模块类似,我们也可以使用Request模块来处理文件下载链接重定向的情况。下面是一个例子:

const request = require('request');
const fs = require('fs');

const url = 'http://example.com/file.pdf';
const filePath = './file.pdf';

function downloadFile(url, filePath) {
  request(url)
    .on('response', (response) => {
      const { statusCode } = response;

      if (statusCode === 301 || statusCode === 302) {
        console.warn(`文件重定向: ${response.headers.location}`);
        downloadFile(response.headers.location, filePath);
        return;
      }

      if (statusCode !== 200) {
        console.error(`请求下载文件出错: 状态码 ${statusCode}`);
        return;
      }

      response.pipe(fs.createWriteStream(filePath)).on('finish', () => {
        console.log('下载完成');
      });
    })
    .on('error', (err) => {
      console.error(`请求下载文件出错: ${err.message}`);
    });
}

downloadFile(url, filePath);

在上面的代码中,我们使用statusCoderrreee

Dans le code ci-dessus, nous utilisons l'événement data intégré pour suivre la progression du téléchargement et utilisons le Content- En-tête Longueur pour calculer le pourcentage de téléchargement. Une fois le téléchargement terminé, nous affichons un message « Téléchargement terminé ».

    Gestion des redirections

    #🎜🎜#Parfois, les liens de téléchargement de fichiers peuvent être redirigés. Nous pouvons vérifier si le code d'état de la réponse est 301 ou 302 et utiliser l'en-tête Location pour obtenir le lien redirigé. Voici l'exemple de code : #🎜🎜#rrreee#🎜🎜# Dans le code ci-dessus, nous utilisons la variable httpClient pour vérifier le protocole (http ou https) et utilisons le statusCode code> pour vérifier le code d’état de la réponse. S'il s'agit de 301 ou 302, affichez le message redirigé et retéléchargez le fichier. Si ce n'est pas 200, un message d'erreur est émis. #🎜🎜##🎜🎜# 2. Utilisez le module Request pour télécharger des fichiers #🎜🎜##🎜🎜# En plus du module HTTP, il existe également des modules tiers populaires dans Node.js qui peuvent être utilisés pour télécharger des fichiers, parmi lesquels le module de bienvenue le plus populaire est le module de demande. Le module Request est un client HTTP simple, puissant et convivial créé par Mikeal Rogers. #🎜🎜##🎜🎜##🎜🎜#Install Request module#🎜🎜##🎜🎜##🎜🎜#Pour utiliser le module Request pour le téléchargement de fichiers, vous devez d'abord l'installer. Vous pouvez exécuter la commande suivante dans la ligne de commande pour installer : #🎜🎜#rrreee#🎜🎜##🎜🎜#Étapes de base pour télécharger des fichiers #🎜🎜##🎜🎜##🎜🎜#Étapes de base pour télécharger des fichiers à l'aide du Le module de requête est identique à l'utilisation du module HTTP. Voici un exemple simple : #🎜🎜#rrreee#🎜🎜#Dans le code ci-dessus, nous utilisons la méthode <code>request pour créer une requête HTTP et écrire la réponse dans un flux de fichiers via un canal intermédiaire. Une fois le téléchargement terminé, nous affichons un message « Téléchargement terminé ». #🎜🎜#
      #🎜🎜#Gérer la progression du téléchargement #🎜🎜##🎜🎜##🎜🎜#Pour gérer la progression du téléchargement, vous pouvez utiliser la requête renvoyée par la request code> objet méthode. La taille du fichier peut être obtenue à l'aide de l'en-tête intégré <code>Content-Length. De plus, le module Request fournit un événement progress intégré qui nous permet de suivre la progression du téléchargement. Voici un exemple : #🎜🎜#rrreee#🎜🎜#Dans le code ci-dessus, nous utilisons l'événement response pour obtenir la taille du fichier et utiliser les données intégrées. code> événement pour calculer et afficher le pourcentage de téléchargement. #🎜🎜#<ol start="4">#🎜🎜#Gestion de la redirection#🎜🎜##🎜🎜##🎜🎜#Similaire au module HTTP, nous pouvons également utiliser le module Request pour gérer la redirection du lien de téléchargement de fichiers. . Voici un exemple : #🎜🎜#rrreee#🎜🎜#Dans le code ci-dessus, nous utilisons <code>statusCode pour vérifier le code d'état de la réponse. S'il s'agit de 301 ou 302, affichez le message redirigé et retéléchargez le fichier. Si ce n'est pas 200, un message d'erreur est émis. #🎜🎜##🎜🎜#Summary#🎜🎜##🎜🎜#Cet article explique comment utiliser le module HTTP et le module Request pour télécharger des fichiers dans Node.js. Il comprend les étapes de base pour télécharger des fichiers à l'aide du module HTTP et du module Request, gérer la progression du téléchargement et gérer la redirection du lien de téléchargement de fichiers. Node.js fournit une fonction de téléchargement de fichiers très pratique, qui peut facilement implémenter le téléchargement de fichiers. #🎜🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:installation de git nodejsArticle suivant:installation de git nodejs