Comment vérifier si le téléchargement a réussi dans nodejs

WBOY
Libérer: 2023-05-17 09:31:06
original
770 Les gens l'ont consulté

NodeJS est un langage de programmation JavaScript qui s'exécute côté serveur. Son émergence facilite grandement le développement d'applications web. Parmi de nombreuses applications NodeJS, le téléchargement est l'opération la plus courante, et comment vérifier si un téléchargement a réussi est également un problème inévitable dans le développement Web. Cet article explique comment utiliser NodeJS pour vérifier si le téléchargement a réussi.

Dans NodeJS, vous pouvez utiliser http, https, request et d'autres modules pour télécharger des fichiers. Utilisez le module http ou https pour télécharger des fichiers distants et les enregistrer localement ; tandis que le module de requête est plus avancé et peut gérer automatiquement des opérations telles que la redirection, l'acquisition de nom de domaine et les cookies.

Peu importe le module utilisé, que le téléchargement du fichier ait réussi ou échoué, l'état du téléchargement peut être jugé par l'attribut statusCode de l'objet renvoyé. Si statusCode est égal à 200, cela signifie que le téléchargement a réussi, et si statusCode est égal à d'autres valeurs, cela signifie que le téléchargement a échoué.

Par exemple, en utilisant le module http pour télécharger un fichier :

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

const file = fs.createWriteStream("file.pdf"); // 创建文件写入流
const request = http.get("http://example.com/file.pdf", function(response) {
    response.pipe(file); // 将响应数据写入文件
    console.log("statusCode: ", response.statusCode); // 输出状态码
});
Copier après la connexion

Dans le code ci-dessus, lorsque la réponse est renvoyée avec succès, ses données sont enregistrées dans le fichier file.pdf et le code d'état est imprimé. Si statusCode est égal à 200, cela signifie que le téléchargement a réussi. Si le téléchargement échoue, il doit être géré en écoutant l'événement « erreur ».

Par rapport au module http, la vérification du téléchargement du module de requête sera plus pratique. Par exemple :

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

const file = fs.createWriteStream('file.pdf'); // 创建文件写入流
request.get('http://example.com/file.pdf') // 发送请求
    .on('response', function(response) { // 监听响应事件
        if(response.statusCode == 200) { // 判断响应状态码
            response.pipe(file); // 将响应数据写入文件
        }
    })
    .on('error', function(error) { // 监听下载错误事件
        console.log(error);
    });
Copier après la connexion

Dans cet exemple, utilisez la méthode request.get pour envoyer une requête et écoutez l'événement « response » pour déterminer si le téléchargement a réussi. Si le statusCode de la réponse est 200, cela signifie que le téléchargement a réussi. L'échec du téléchargement doit également être géré en écoutant l'événement « erreur ».

Lors du téléchargement de fichiers volumineux, nous pouvons être plus préoccupés par la progression du téléchargement. Le module de requête peut obtenir chaque élément de données téléchargées en écoutant l'événement « data » pour calculer la progression du téléchargement.

Par exemple, téléchargez un fichier d'environ 100 Mo :

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

const file = fs.createWriteStream('file.pdf'); // 创建文件写入流
const url = 'http://example.com/file.pdf';
let receivedSize = 0;

const req = request.get(url); // 发送请求
req.on('data', function(data) { // 监听数据事件
    receivedSize += data.length; // 计算已接收的文件大小
    const progress = (receivedSize / req.response.headers['content-length']) * 100; // 计算下载进度
    console.log('progress:', progress.toFixed(2) + '%'); // 打印下载进度
})
.on('error', function(error) { // 监听下载错误事件
    console.log(error);
})
.pipe(file); // 将响应数据写入文件
Copier après la connexion

Dans cet exemple, utilisez req.response.headers['content-length'] pour obtenir la taille totale du fichier, en calculant la quantité de données reçues et la taille totale du fichier Obtenez la progression du téléchargement. Dans le même temps, utilisez l'événement req.on('data') pour surveiller le flux de données et obtenir chaque élément de données téléchargées.

Lors de la vérification du succès du téléchargement, nous devrons peut-être également vérifier l'intégrité des fichiers. Dans NodeJS, vous pouvez également utiliser les méthodes fournies par le module fs pour créer des hachages de fichiers, comparer les hachages, etc. afin de vérifier la valeur MD5 du fichier afin de garantir l'intégrité du fichier.

Par exemple, vérifiez la valeur MD5 d'un fichier téléchargé :

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

const file = 'file.pdf';
const expectedHash = '9d7d60e575578bcf5c0754510d105efa'; // 文件的期望MD5值
const hash = crypto.createHash('md5');
const stream = fs.createReadStream(file);

stream.on('data', function(data) {
    hash.update(data); // 更新哈希值
});
stream.on('end', function() {
    const digest = hash.digest('hex'); // 获取文件哈希值
    console.log('digest:', digest);
    console.log('hash comparison:', (expectedHash === digest)); // 比较期望的文件哈希值和实际哈希值
});
Copier après la connexion

Dans cet exemple, utilisez la méthode fs.createReadStream pour obtenir le flux de fichier et créez un objet de hachage MD5 via crypto.createHash('md5'), en utilisant le flux L'événement .on('data') met à jour en permanence la valeur de hachage. Une fois le streaming du fichier terminé, la valeur de hachage réelle du fichier est obtenue via hash.digest('hex'), et enfin les valeurs de hachage attendues et réelles sont comparées pour vérifier l'intégrité du fichier.

Lors du téléchargement d'un fichier, vérifier que le téléchargement a réussi n'est que la première étape, et vérifier l'intégrité du fichier est la clé pour garantir la sécurité des données. Grâce aux méthodes présentées ci-dessus, nous pouvons vérifier rapidement le succès du téléchargement et l'intégrité des fichiers dans NodeJS, améliorant ainsi la sécurité et la stabilité des applications Web.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!