在Express中使用Multiparty进行文件上传及POST、GET参数获取

Express 版本:4.14.1

在Express中,文件上传需要用到multiparty中间件,在项目目录中,通过npm install multiparty –save进行安装必要组件。

前端HTML代码,用于上传文件:

<form action="/upload" method="post" enctype="multipart/form-data"> 
   <input id="lefile" type="file" name="filenames" multiple="multiple" /> 
   <input type="submit" class="btn btn-primary" value="submit" /> 
</form>

单文件处理


后台NodeJs代码, 用于接收文件:

router.post('/upload', function(req, res) {
     //生成multiparty对象,并配置上传目标路径
    var form = new multiparty.Form();
    //设置编辑
    form.encoding = 'utf-8';
    //设置文件存储路径
    form.uploadDir = "E:/";
    //上传完成后处理
    form.parse(req, function (err, fields, files) {
        var filesTmp = JSON.stringify(files, null, 2);
        if (err) {
            console.log('parse error: ' + err);
        } else {
            console.log('parse files: ' + filesTmp);
            var inputFile = files['filenames'][0];
            //重命名为真实文件名
            fs.renameSync(inputFile.path, form.uploadDir+inputFile.originalFilename, function (err) {
                if (err) {
                    console.log('rename error: ' + err);
                } else {
                    console.log('rename ok');
                }
            });
        }
        res.writeHead(200, {'content-type': 'text/plain;charset=utf-8'});
        res.write('received upload:

');
        res.end(util.inspect({fields: fields, files: filesTmp}));
    });
});
module.exports = router;

多文件上传处理


//保存上传文件
files['filenames'].forEach(function(inputFile) {
    //重命名为真实文件名
    fs.renameSync(inputFile.path, form.uploadDir + projectName + "/" + inputFile.originalFilename,
    function(err) {
        if (err) {
            console.log('rename error: ' + err);
        } else {
            console.log('rename ok');
        }
    });
});

获取参数值


此时,如果需要在上传文件的过程中获取post或者get参数,不能按照往常的做法,而是需要使用Multiparty中间件来获取,即在form.parse函数块中获取,如下所示:

form.parse(req, function (err, fields, files) {
        projectName = fields['projectName'];
        ......

此处获取参数projectName的值。

参考:multiparty官方文档

原文地址:https://www.cnblogs.com/eczhou/p/7845506.html