multer是express官方推荐的文件上传中间件,调用方法如下
1、在NodeJs项目下的package.json中添加multer依赖,并运行npm install运行安装
"multer" : "0.1.6"
2、引入该模块
var multer = require('multer');
3、配置相关参数
var multer_head = multer({dest : '../public/images/', rename : function(fieldname, filename){return filename;}})
4、使用
router.post('/setting', multer_head, function(req, res){...})
代码如下
setting.ejs
<%- include header %> <form method="post" enctype="multipart/form-data"> 上传头像:<input type="file" name="head" /><br> <input type="submit" value="保存" /> </form> <%- include footer %>router文件
var multer = require('multer'); var multer_head = multer({ dest : '../public/images/head/', //保存路径 rename : function(fieldname, filename){ //重命名 var date = new Date(); return fieldname + '_' + filename + '_' + date.getTime(); } }); //上传头像 router.post('/setting', multer_head, function(req, res){ req.flash('success', '头像上传成功'); res.redirect('/'); })注意:
1、提交form表单文件时,注意enctype="multipart/form-data"参数
2、如果上传的图像没有找到,可能是由于路径问题
3、这种写法是基于0.1.6版本的multer,官方已经更新到1.1.0版本,很多教材还是使用旧版本的案例作为讲解,导致很杂乱,下面说一下新版本的写法
基于1.1.0版本的multer用法
1、更新一下package.json中的multer版本号,然后npm install重新安装一下
2、models文件夹中新建multerUtil.js文件,写入如下代码
var multer = require('multer'); var storage = multer.diskStorage({ //保存路径 destination : function(req, file, cb){ cb(null, '../public/images/head/'); }, //重命名 filename : function(req, file, cb){ var fileFormat = (file.originalname).split('.'), date = new Date(); cb(null, file.fieldname + '_' + date.getTime() + '.' + fileFormat[fileFormat.length - 1]); } }) var multer_head = multer({ storage : storage }) module.exports = multer_head;3、router文件
var multer_head = require('../models/multerUtil.js'); //参数名要和表单字段名一致 var upload = multer_head.single('head'); //上传头像 router.post('/setting', upload, function(req, res){ req.flash('success', '头像上传成功'); res.redirect('/'); })注意:上传文件的保存路径并不会自动创建,需要手动创建好,如果没有该文件夹,会报错
文件上传有以下方法:
multer.single('file') //适用于单文件上传
multer.array('file', num) //适用于多文件上传,num为最多上传个数,上传文件的数量可以小于num
multer.fields(fields) //适用于混合上传,请参考官方API
参考链接:
http://cnodejs.org/topic/564f32631986c7df7e92b0db
https://github.com/expressjs/multer