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的值。