1、安装multiparty
cnpm install multiparty --save
2、引入
var multiparty = require('multiparty');
var fs = require('fs'); //文件模块
3、表格一定要含有enctype="multipart/form-data"
<form action="/doProductAdd" method="post" enctype="multipart/form-data">
商品名称: <input type="text" name="title"/>
商品图片: <input type="file" name="pic"/>
</form>
4、获取普通表单值和文件
app.use('/upload',express.static('upload'));//设置虚拟静态目录
var form = new multiparty.Form();//实例化表单
form.uploadDir='upload';//定义上传路径为根目录/upload
form.parse(req, function (err, fields, files) {
var title = fields.title[0];
var pic = files.pic[0].path;
//...将文件路径和标题存入数据库
});
说明:实际开发中,我们经常会更换商品的图片,
app.post('/doProductEdit',function (req, res) {
var form = new multiparty.Form();
form.uploadDir='upload';
form.parse(req, function (err, fields, files) {
var _id = fields._id[0];
var title = fields.title[0];
var pic = files.pic[0].path;//上传则有原始路径,没上传则有一个无效文件的路径
//上传则原始文件不为空,没上传则为空,可以此判断用户是否更换图片
var originalFileName = files.pic[0].originalFilename;
//如果不为空:说明用户上传了图片,那么需要更新pic字段
if(originalFileName){
var setData = {
title,
pic
}
}else{//如果为空:说明用户没有上传图片,那么不需要更新pic字段
var setData = {
title,
};
//即使没有上传图片。系统会自动上传一个无效文件,因此删除
fs.unlink(pic,function () {
});
}
});
});