0
我有一些文本字段和文件輸入不能爲空的表單,我想先用文本字段做一些操作(添加到數據庫),如果這些操作成功了,上傳文件。這是現在我的代碼: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)
似乎沒有工作。
如果你想創建藝術家後,將文件上傳,REST的方式是創建藝術家,使用Location響應頭返回201 CREATED響應(也可能是一個包含新創建對象的主體)。然後,客戶端將解析響應主體或響應頭以確定新對象的ID,然後發出* second *請求來POST文件。 (或者你可以發送第一個請求的文件,並一次完成)。 – Dave