在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:\n\n');
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的值。
浙公网安备 33010602011771号