天天看点

Nodejs开发技巧集锦(4):使用multiparty获取上传的表单文件

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 () {
                
            });
        }

    
    });
});