Maison > interface Web > js tutoriel > le corps du texte

node.js utilise le middleware Multer pour télécharger des fichiers

青灯夜游
Libérer: 2021-03-04 10:36:16
avant
1821 Les gens l'ont consulté

Cet article vous présentera comment node.js utilise le middleware multer pour résoudre le problème de téléchargement de fichiers post. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

node.js utilise le middleware Multer pour télécharger des fichiers

Recommandations associées : "tutoriel nodejs"

le middleware body-parser est en fait "extrêmement imparfait" - il est seulement capable de gérer "données simples".
Comme nous le savons tous, la publication est couramment utilisée pour deux choses :

  • Soumission de données (soumission post-formulaire)

  • Téléchargement de fichiers

Mais le « célèbre » analyseur corporel ne peut faire que la première chose.

Mal à l'aise...

Le formidable module a été utilisé dans l'article sur le téléchargement de fichiers image que j'ai écrit auparavant. Le cœur de celui-ci est :

var form=new formidable.IncomingForm();
Copier après la connexion

Ce qui suit form.uploadDir, surveillance de champ/fin ... sont tous basés sur cela.

D'accord, ce dont nous voulons parler ici, c'est de l'inconvénient : comme le body-parser, le formidable plug-in ne peut être utilisé que pour traiter des formats d'images, ce qui est également bien dommage.


Ainsi, l'auteur a trouvé le middleware mult, en espérant qu'il puisse "sauver les montagnes et les rivières fragmentées" (haha)

Une des applications de mult middleware : Téléchargement de fichiers

(c)npm install express multer
Copier après la connexion
const express = require('express');
const bodyparser = require('body-parser');//解析post数据
const multer = require('multer'); //解析Post文件
const fs = require('fs');
const pathlib = require('path'); //解析文件路径
 
var server = express();
 
var objMulter = multer({dest:'./www/upload'}); //用户上传文件存入dest目录下
server.use(objMulter.any()); //处理任何用户上传的文件
 
//处理post文件数据
server.post('/',function(req,res){
	console.log(req.files[0].originalname); //req.files post文件 originalname为文件名
 
	//获取原始拓展名+后缀名
	var newName = req.files[0].path+pathlib.parse(req.files[0].originalname).ext;
 
	//重命名
	fs.rename(req.files[0].path,newName,function(err){
		if(err){
			res.send('上传失败');
		}else{
			res.send('上传成功');
		}
	});
});
server.listen(8081);
Copier après la connexion

Ici, req.files est utilisé à la place de req.body : car seuls les nombres (texte) peuvent être stockés dans le corps - si vous utilisez body-parser ici, vous ne verrez que le console. Nom du fichier affiché.

La fonction de objMulter.any() dans le code est de "récupérer toutes les données"
Il y a un autre any() en face de single(), qui doit spécifier un paramètre - le nom devant ; -fin <input> nom ! Par exemple, dans cet exemple, vous pouvez également écrire :

server.use(objMulter.single(&#39;f1&#39;));
Copier après la connexion

Le code front-end est le suivant - soumission du fichier, le format spécifié est multipart/form-data :

<form action="http://localhost:8081/" method="post" enctype="multipart/form-data">
	文件:<input type="file" name="f1" /><br />
	<input type="submit" value="上传" />
</form>
Copier après la connexion

en fait utilise rename dans le module fs La méthode (chemin d'origine, nouveau chemin, rappel) atteint l'objectif de "télécharger des fichiers" en modifiant de force le chemin de stockage du fichier.


Extension d'aujourd'hui :
La méthode de résolution dans le module path est couramment utilisée dans le nœud pour "spécifier les fichiers" (notez les lignes 16/17) :

var http = require(&#39;http&#39;);
var fs = require(&#39;fs&#39;);
var path = require(&#39;path&#39;);

var server = http.createServer(function (req, res) {
    var method = req.method; // 获取请求方法
    if (method === &#39;POST&#39;) { // 暂只关注 post 请求
        var dataStr = &#39;&#39;;
        req.on(&#39;data&#39;, function (chunk) {
            // 接收到数据,先存储起来
            var chunkStr = chunk.toString()
            dataStr += chunkStr
        });
        req.on(&#39;end&#39;, function () {
            // 接收数据完成,将数据写入文件
            var fileName = path.resolve(__dirname, &#39;post.txt&#39;);
            fs.writeFile(fileName, dataStr)
            res.end(&#39;OK&#39;);
        });
    }
});
server.listen(8081);
Copier après la connexion

Pour plus de connaissances liées à la programmation, veuillez visiter : Apprendre la programmation ! !

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!

Étiquettes associées:
source:csdn.net
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