multer中间件上传文件

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

你可能感兴趣的:(multer中间件上传文件)