Multer访问req.body没有上传文件
问题描述:
我有一些文本字段和文件输入不能为空的表单,我想先用文本字段做一些操作(添加到数据库),如果这些操作成功了,上传文件。这是现在我的代码:Multer访问req.body没有上传文件
var multer = require('multer');
var getFields = multer();
router.post('/add',getFields.array(),function(req,res){
var artist = new ArtistModel({
name : req.body.name.toLowerCase(),
description:req.body.description,
});
我再加入艺术家我DB和成功的回调我要上传的文件。然而,问题是我不能简单地使用getFields.array(),因为我有文件输入,并且出现“Unexpected fields”错误,如果我不使用.array(),我无法获得发布请求主体。无论如何,首先获得enctype =“multipart/form-data”的表单文本字段,然后上传文件?
更新#2 感谢Dave我能得到的文本字段,而上传文件,我成功添加我的艺术家到我的数据库,但我无法弄清楚如何上传文件后, 我在我addToDb的回调函数创建一个新的变量:
var storage = multer.diskStorage({
destination: function (req, file, cb) {
//cb(null, 'artistsMedia/drake/songs')
var dir = 'artistsMedia/' + req.body.name.toLowerCase()+ '/images';
mkdirp(dir,err => cb(err,dir))
},
filename: function (req, file, cb) {
cb(null, req.body.name.toLowerCase() +'-'+ file.fieldname +'-'+ Date.now() + path.extname(file.originalname)) //Appending extension
},
});
var upload = multer({
storage: storage,
limits :{fileSize :52428800}
}).fields([{name:'Logo',maxCount:1},{name:'artistHome',maxCount:1},{name:'otherImgs',maxCount:10}]);
但是调用upload(req,res,err)
似乎没有工作。
答
尝试用multer的any()
功能:
var multer = require('multer');
var getFields = multer();
router.post('/add',getFields.any(),function(req,res){
// any files, if sent, will be in req.files
var artist = new ArtistModel({
name : req.body.name.toLowerCase(),
description:req.body.description,
});
});
如果你是肯定会有没有提交任何文件,请使用multer的none()
功能:
var multer = require('multer');
var getFields = multer();
router.post('/add',getFields.none(),function(req,res){
// uploading files will cause an error
var artist = new ArtistModel({
name : req.body.name.toLowerCase(),
description:req.body.description,
});
});
如果你想创建艺术家后,将文件上传,REST的方式是创建艺术家,使用Location响应头返回201 CREATED响应(也可能是一个包含新创建对象的主体)。然后,客户端将解析响应主体或响应头以确定新对象的ID,然后发出* second *请求来POST文件。 (或者你可以发送第一个请求的文件,并一次完成)。 – Dave