Maison >interface Web >Questions et réponses frontales >Comment vérifier si le téléchargement a réussi dans nodejs
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); // 输出状态码 });
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); });
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); // 将响应数据写入文件
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)); // 比较期望的文件哈希值和实际哈希值 });
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!