Préface
Lorsque vous téléchargez des fichiers avec HTTP, vous n'avez qu'à définir l'en-tête de réponse pertinent sur le serveur et à utiliser le binaire pour transmettre des données de fichiers, et le client (navigateur) recevra des données de fichiers en fonction de l'en-tête de réponse. Dans Node.js, après avoir réglé l'en-tête de réponse, lisez le flux de fichiers, puis transférez le flux vers la Response de l'objet de réponse à l'aide de la méthode “.pipe()” , vous pouvez implémenter un serveur de téléchargement de fichiers simple.
1. Introduction de téléchargement de fichiers
HTTP implémente l'interaction d'état en fonction de l'en-tête de demande et de l'en-tête de réponse. Après avoir obtenu l'état de réponse correct du serveur, le client analysera d'abord l'en-tête de réponse et recevra et affichera les données (corps de réponse) en fonction de l'en-tête de réponse. Pour le téléchargement de fichiers, le processus d'implémentation est le suivant:
1. Le client initie une demande de ressources de fichiers
2. Le serveur recherche le fichier correspondant et définit les en-têtes de réponse tels que " Content-Type " et " Content-Disposition " pour représenter respectivement le type "mime" et la description du fichier du fichier.
3. Le client analyse et reçoit des données de fichiers en fonction de l'en-tête de réponse renvoyée par le serveur.
En-tête de réponse qui doit être réglé
Lors de la configuration des en-têtes de réponse de téléchargement de fichiers, en plus des en-têtes de réponse HTTP couramment utilisés, il est plus important de définir les deux en-têtes de réponse suivants:
Type de contenu: application / octet-streamContent-Disposition: pièce jointe; filename = myFileName.ext
Dans les paramètres ci-dessus, " Content-Type: application/octet-stream " indique au navigateur qu'il s'agit d'un fichier binaire, et " Content-Disposition " indique au navigateur qu'il s'agit d'une pièce jointe qui doit être téléchargée et indique au navigateur le nom de fichier par défaut. Si l'en-tête de réponse " Content-Disposition " n'est pas ajouté, le navigateur peut télécharger ou afficher le contenu du fichier et que le traitement de différents navigateurs varie.
2. Implémentation du serveur de téléchargement de fichiers Node.js
Ensuite, nous implémentons un serveur de téléchargement de fichiers simple basé sur le framework express, qui comprend principalement deux fonctions: parcourir les fichiers du serveur et télécharger des fichiers .
2.1 Ajout d'un itinéraire
Après avoir créé l'application Express, ajoutez les deux itinéraires suivants:
router.get ('/ files', fonction (req, res, next) {// show server fichier}); Router.get ('/ file /: filename', fonction (req, res, next) {// implément le téléchargement de fichiers});Les deux itinéraires ajoutés ci-dessus sont utilisés pour: afficher les fichiers du serveur et implémenter les téléchargements de fichiers .
2.2 Fichiers d'affichage du serveur
Pour réaliser l'affichage des fichiers du serveur, vous devez lire le répertoire de fichiers via le module " fs " et effectuer des vérifications de fichiers / répertoires , etc. Vous devez également utiliser le module " Path " pour traiter le chemin du fichier. Tout d'abord, ces deux modules sont introduits:
const fs = require ('fs'); const path = require ('path');Le code d'implémentation pour afficher le fichier serveur est le suivant:
router.get ('/ files', fonction (req, res, next) {// show server file // répertoire de fichier var filepath = path.join (__ dirname, './'); fs.readdir (filepath, function (err, résultats) {if (err) lancer err; if (results.length> 0) {var fileS = []; results. pour pour if (fs.StatSync (path.join (filepath, file). Dans le code ci-dessus, après avoir lu le répertoire, la liste des fichiers téléchargeables s'affiche via le fichier d'affichage " files.ejs ". Le code est le suivant:
<! Doctype html> <html> <adhead> <ititle> Sélection de téléchargement de fichiers </tapt> </ad> <body> <h1> Veuillez sélectionner le fichier de téléchargement: </h1> <% if (files.length> 0) {%> <ul> <% files.foreach (function (file) {%> <li> <a href = "/ file / <% - File -" wad "wadch =" wadch = "wadch =" wadch = "wadch =" wadch = "wadch =" wadch = "wadch = wermple %> </a> </li> <%})%> </ul> <%} else {%> <p> pas de fichiers téléchargeables ... </p> <%} %> </body> </html>2.3 Implémenter le téléchargement des fichiers
Lors du téléchargement d'un fichier, vous pouvez d'abord lire le fichier dans un " Buffer ", puis envoyer les données de fichier via les méthodes " res.send()” ou " res.end()” , ou vous pouvez envoyer les données de fichier en fonction du flux (" Stream "). Lorsque vous utilisez " Stream " pour implémenter le téléchargement de fichiers, vous pouvez utiliser la méthode " fs.createReadStream()” pour créer un flux lisible, et la Response de l'objet de réponse est un flux écrivative. De cette façon, il vous suffit de transférer le flux de fichiers vers le flux de réponse Response via la méthode ”.pipe()” .
Le code d'implémentation de téléchargement de fichiers est le suivant:
Router.get ('/ file /: filename', fonction (req, res, Next) {// implémentation de fichier téléchargement var filename = req.params.filename; var filepath = path.join (__ dirname, filename); var statts = fsatSync (fsathy «application / octtet-stream», «contenu-disposition»: «attachement;Résumer
Ce qui précède est tout le contenu de l'utilisation de Node.js pour réaliser des téléchargements de fichiers HTTP. J'espère qu'il sera utile à tout le monde d'apprendre Node.js.