Cet article vous donnera une introduction détaillée à la méthode de téléchargement de fichiers Nodejs. 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.
Lorsque j'utilise nodejs pour réaliser des projets, je dois utiliser la fonction de téléchargement de fichiers. J'ai cherché de nombreux tutoriels sur Internet et trouvé un middleware express pour le traitement Le type de données du formulaire peut facilement enregistrer les données du fichier du formulaire sur le serveur. multipart/form-data
, sinon elles. signalera une erreur. [Recommandations associées : "multipart/form-data
tutoriel nodejs"]
Définir la mémoire
adresse demo1 :
var express = require('express'); var multer = require('multer'); var app = express(); var upload = multer({ storage: multer.diskStorage({ destination: function (req, file, cb) { cb(null, './uploads/'); }, filename: function (req, file, cb) { //file.originalname上传文件的原始文件名 var changedName = (new Date().getTime())+'-'+file.originalname; cb(null, changedName); } }) });
dans les deux fonctions, qui représente l'objet fichier actuellement téléchargé et possède les attributs suivants : file
Pièce jointe : certaines couramment utilisées ceux de type MIME
Définir le rappel de route
//单个文件上传 app.post('/upload/single',upload.single('singleFile'),(req,res)=>{ console.log(req.file); res.json({ code: '0000', type:'single', originalname: req.file.originalname }) }); //多个文件上传 app.post('/upload/multer',upload.array('multerFile'),(req,res)=>{ console.log(req.files); let fileList = []; req.files.map((elem)=>{ fileList.push({ originalname: elem.originalname }) }); res.json({ code: '0000', type:'multer', fileList:fileList }); });
. S'il s'agit de plusieurs fichiers, utilisez la méthode single
. Les deux méthodes nécessitent de transmettre un nom de champ défini sur la page. array
Téléchargement mixte
Parfois, nous pouvons avoir besoin d'utiliser des noms de champs pour diviser les fichiers téléchargés, par exemple pour télécharger plusieurs images. Carte d'identité et photo de profil. Bien qu'il puisse être séparé en deux interfaces, cela entraînera une série d'autres problèmes. multer prend en charge la division des images en noms de champs.//多字段名上传 let multipleFields = upload.fields([ {name:'avatar'}, {name:'gallery', maxCount:3}, ]); app.post('/upload/fields', (req,res)=>{ multipleFields(req,res,(err) => { console.log(req.files); if(!!err){ console.log(err.message); res.json({ code: '2000', type: 'field', msg:err.message }) return; } var fileList = []; for(let item in req.files){ var fieldItem = req.files[item]; fieldItem.map((elem) => { fileList.push({ fieldname: elem.fieldname, originalname: elem.originalname }) }); } res.json({ code: '0000', type: 'field', fileList: fileList, msg:'' }) }); });
ici, mais cet attribut n'est pas un tableau, mais un objet complexe. Il y a plusieurs attributs dans cet objet, chaque attribut Le nom est. un nom de champ, et sous chaque attribut se trouve un tableau. Sous le tableau se trouvent les objets fichier. La structure est à peu près la suivante : req.files
{ "avatar":[{ fieldname: "", originalname: "" //... }], "gallery":[{ fieldname: "", originalname: "" //... }] }
Filtrage par type de fichiervar upload = multer({
//...其他代码
fileFilter: function(req, file, cb){
if(file.mimetype == 'image/png'){
cb(null, true)
} else {
cb(null, false)
}
}
});
文件大小和数量过滤
var upload = multer({ //...其他代码 limits:{ //限制文件大小10kb fileSize: 10*1000, //限制文件数量 files: 5 } });
在定义存储器的时候,新增一个limits对象,用来控制上传的一些信息,它有以下一些属性:
在这边我们把fileSize的值设置得小一点,设为10kb方便测试看效果,但是如果这个时候会发现有报错。因为上传的文件大小很容易就会超过10KB,导致有报错出现,我们就需要在路由回调里对错误的情况进行捕获。
//单个文件上传 let singleUpload = upload.single('singleFile'); app.post('/upload/single',(req,res)=>{ singleUpload(req,res,(err)=>{ if(!!err){ console.log(err.message) res.json({ code: '2000', type:'single', originalname: '', msg: err.message }) return; } if(!!req.file){ res.json({ code: '0000', type:'single', originalname: req.file.originalname, msg: '' }) } else { res.json({ code: '1000', type:'single', originalname: '', msg: '' }) } }); }); //多个文件上传 let multerUpload = upload.array('multerFile'); app.post('/upload/multer', (req,res)=>{ multerUpload(req,res,(err)=>{ if(!!err){ res.json({ code: '2000', type:'multer', fileList:[], msg: err.message }); } let fileList = []; req.files.map((elem)=>{ fileList.push({ originalname: elem.originalname }) }); res.json({ code: '0000', type:'multer', fileList:fileList, msg:'' }); }); });
所有的demo代码都在仓库里,地址:https://github.com/acexyf/multerDemo
更多编程相关知识,请访问:编程入门!!
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!