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.
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();
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)
(c)npm install express multer
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);
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('f1'));
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>
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('http'); var fs = require('fs'); var path = require('path'); var server = http.createServer(function (req, res) { var method = req.method; // 获取请求方法 if (method === 'POST') { // 暂只关注 post 请求 var dataStr = ''; req.on('data', function (chunk) { // 接收到数据,先存储起来 var chunkStr = chunk.toString() dataStr += chunkStr }); req.on('end', function () { // 接收数据完成,将数据写入文件 var fileName = path.resolve(__dirname, 'post.txt'); fs.writeFile(fileName, dataStr) res.end('OK'); }); } }); server.listen(8081);
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!