Maison >interface Web >js tutoriel >Tutoriel de développement Node.js : Implémentation de fonctions de téléchargement et de vérification de fichiers basées sur le framework OnceIO

Tutoriel de développement Node.js : Implémentation de fonctions de téléchargement et de vérification de fichiers basées sur le framework OnceIO

高洛峰
高洛峰original
2016-12-24 17:17:40874parcourir

OnceIO est le cadre Web sous-jacent du contenu d'entreprise OnceDoc (disque réseau). Il peut réaliser une mise en cache complète des fichiers modèles et des fichiers statiques pour s'exécuter et prend en charge l'optimisation du cache client, GZIP. compression, etc. (compressé uniquement pour la première fois), a de très bonnes performances, ce qui vous permet d'économiser des coûts de serveur. Sa fonction modulaire permet à votre Web d'être stocké de manière distribuée, c'est-à-dire qu'un package d'extension contient des définitions front-end, back-end et base de données. Les fonctions peuvent être supprimées simplement en ajoutant/supprimant des répertoires, réalisant ainsi une véritable expansion modulaire. Voici une série d'articles présentant comment utiliser OnceIO.

Dans ce chapitre, nous montrerons comment utiliser OnceIO pour implémenter la fonction de téléchargement de fichiers.

Créer un formulaire dans un fichier de page Web

Prenons comme exemple un simple fichier de page Web.html qui n'a qu'une fonction de téléchargement de fichier :

<!DOCTYPE html>
<html>
<body>
<form method="post" enctype="multipart/form-data" action="/file/upload">
<input type="file" name="file" /><br>
<input type="submit" value="Upload" />
</form>
</body>
</html>

Le navigateur L'effet d'affichage est le suivant :

Tutoriel de développement Node.js : Implémentation de fonctions de téléchargement et de vérification de fichiers basées sur le framework OnceIO

Cliquez sur la barre vide ou sur le bouton "Parcourir..." pour ouvrir la fenêtre de navigation dans les fichiers et sélectionnez le fichier à télécharger :

Tutoriel de développement Node.js : Implémentation de fonctions de téléchargement et de vérification de fichiers basées sur le framework OnceIO

Construire le serveur recevant la logique du fichier

Le code du fichier serveur websvr.js est le suivant :

var fs = require(&#39;fs&#39;)
var path = require(&#39;path&#39;)
var onceio = require(&#39;../onceio/onceio&#39;)
var app = onceio()
app.get(&#39;/&#39;, function(req, res){
res.render(&#39;file.html&#39;)
})
app.file(&#39;/file/upload&#39;, function(req, res) {
var fileInfo = req.files.file || {}
fs.link(fileInfo.path, path.join(&#39;./fileStore&#39;, fileInfo.name))
res.send(&#39;File Uploaded Successfully&#39;)
}).before(function(req, res) {
var contentLength = req.headers[&#39;content-length&#39;] || 0
if (contentLength > 1048576) {
res.send({ error: &#39;Error: File Size Limit (1 MB) Exceeded&#39; })
} else {
return true
}
})

var fs = require('fs ') et var path = require('path') importent respectivement le module de système de fichiers (fs) fourni par Node.js pour l'exploitation des fichiers et le module path pour le traitement des chemins de fichiers .

app.file(path, callback).before(callback) est équivalent à app.use(path, callback, {file: true}).before(callback) et est un middleware pour le traitement des fichiers téléchargés.

Une fois le fichier téléchargé, sa taille, son adresse de stockage, son nom, son format et son heure de modification seront placés dans l'attribut de fichier de req.files (le nom est la balise d'entrée de type 'fichier'), ses informations de taille seront placées dans l'attribut content-length de req.headers. La fonction

before

before est l'une des principales différences entre OnceIO et les autres frameworks Web. Il peut effectuer certaines vérifications de base sur les fichiers avant de les recevoir, comme la taille, le type, etc., afin d'obtenir les meilleures performances. Return true indique que la vérification est réussie et que le fichier commence à être reçu, sinon la connexion est fermée et le téléchargement est annulé. Auparavant, l'objet req.session n'était pas disponible car la session peut exister dans un fichier ou une base de données redis, et l'obtention de la session est un processus asynchrone qui prend du temps. La fonction before doit porter un jugement immédiat sur la légalité du fichier.

Dans cet exemple, la fonction de rappel avant détermine si le fichier téléchargé dépasse la limite de taille en fonction de la longueur du contenu dans req.headers (les développeurs peuvent modifier la limite supérieure de la taille de téléchargement du fichier en modifiant la constante dans le if instruction, content- L'unité de longueur est l'octet, 1024 * 1024 signifie 1 Mo). Si elle dépasse, le fichier ne sera pas téléchargé et le serveur renverra un message d'erreur si elle ne dépasse pas, la valeur de retour de la fonction sera ; true, et le serveur continuera à exécuter la fonction de rappel dans app.file. Transférez le fichier de l'adresse temporaire vers l'adresse de stockage spécifiée et téléchargez le fichier ici pour terminer.

Résoudre le problème des noms de fichiers en double

Notre programme serveur actuel ne peut pas résoudre le problème des noms de fichiers en double. Si l'utilisateur télécharge un fichier du même nom, le serveur renvoie une erreur indiquant que le fichier existe déjà. Afin de résoudre ce problème, nous pouvons ajouter un horodatage entre le nom du fichier principal et le nom d'extension du fichier. Le code de fonction pour ce traitement est le suivant :

var timestampName = function(fileName){
// get filename extension
var extName = path.extname(fileName)
// get base name of the file
var baseName = path.basename(fileName, extName)
// insert timestamp between base name and filename extension
// the plus sign (&#39;+&#39;) before new Date() converts it into a number
return baseName + +new Date() + extName
}

.

Remplacez fileInfo.name dans l'instruction fs.link par timestampName(fileInfo.name) :

fs.link(fileInfo.path, path.join(&#39;./fileStore&#39;, timestampName(fileInfo.name)))

Le programme serveur amélioré autoriser L'utilisateur a téléchargé un fichier portant le même nom. En prenant comme exemple le fichier nommé 'cache_workflow.png' téléchargé 5 fois, il y aura 5 fichiers dont les noms commencent par 'cache_workflow' mais avec des horodatages différents dans l'adresse de stockage de fichiers du serveur. :

Tutoriel de développement Node.js : Implémentation de fonctions de téléchargement et de vérification de fichiers basées sur le framework OnceIO

Adresse OnceIO : https://github.com/OnceDoc/onceio

Exemple de code source : https://github.com/OnceDoc/ OnceAcademy/tree/master /Lesson14

Ce qui précède est le didacticiel de développement Node.js introduit par l'éditeur pour implémenter le téléchargement et la vérification de fichiers basés sur le framework OnceIO. J'espère que cela vous sera utile si vous l'avez fait. Si vous avez des questions, veuillez me laisser un message. L'éditeur répondra à tout le monde à temps. Je voudrais également vous remercier tous pour votre soutien au site Web PHP chinois !


Pour plus de tutoriels de développement Node.js sur l'implémentation des fonctions de téléchargement et de vérification de fichiers basées sur le framework OnceIO, veuillez faire attention au site Web PHP 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