我的快递表单处理req.files给我空的数组或对象我已经尝试过的所有策略。
并且我的文件字段不被multer中的makemiddleware对象视为文件。 (尝试控制它并形成提交不会去那里)。
我有我的客户端请求有效负载如下所示和服务器端req.headers ['content-type']安慰为multipart / form-data
------WebKitFormBoundaryjcaOV7ABMw82oDRB
Content-Disposition: form-data; name="username"
Yash
------WebKitFormBoundaryjcaOV7ABMw82oDRB
Content-Disposition: form-data; name="email"
[email protected]
------WebKitFormBoundaryjcaOV7ABMw82oDRB
Content-Disposition: form-data; name="password"
yash
------WebKitFormBoundaryjcaOV7ABMw82oDRB
Content-Disposition: form-data; name="confirmPassword"
yash
------WebKitFormBoundaryjcaOV7ABMw82oDRB
Content-Disposition: form-data; name="profilePicture"
[object FileList]
------WebKitFormBoundaryjcaOV7ABMw82oDRB--
//Middleware
var uploadPath = path.join(__dirname, '../public/upload');
var upload = multer({
dest: uploadPath,
rename: function (fieldname, filename) {
return filename.replace(/\W+/g, '-').toLowerCase() + Date.now();
},
onFileUploadStart: function (file) {
console.log(file.fieldname + ' is starting ...');
},
onFileUploadData: function (file, data) {
console.log(data.length + ' of ' + file.fieldname + ' arrived');
},
onFileUploadComplete: function (file) {
console.log(file.fieldname + ' uploaded to ' + file.path);
}
});
//Route
router.route('/user/signmeup')
.post(function(req, res){
upload.array('profilePicture', 2)(req, res, (err) => {
console.dir(req.headers['content-type']);
if (err) {
console.log('err', err);
}else{
console.log('coming here'); console.log(req.files); console.log(req.body);
var reg = new Registration();
let args = { body : req.body, session : req.session };
reg.applyForMembership(args, function(err, result){
res.json(result);
});
}
});
});
通过中间件req进程后,req.body和req.files总是像下面这样打印
coming here
[]
{ username: 'Yash',
email: '[email protected]',
password: 'yash',
confirmPassword: 'yash',
profilePicture: '[object FileList]' }
这是前端表单处理的问题和/或在我的应用程序中配置multer的方式。
感谢任何有关这方面的帮助,在过去的几天里一直在努力,似乎没有任何工作。
谢谢,Gj
好吧,我几个小时都在苦苦挣扎 - 我终于成功了。
问题原来是我必须在我的<input type='file' />
标签上添加'name'属性,就像这个<input type='file' name='myFileName'>
然后 - 我必须确保在我的multer设置中 - 我必须在我的array()函数调用中具有完全相同的名称'myFileName' - 像这样:
router.post('/', multer({dest:'./uploads'}).array('myFileName', 1), function(req, res, next) {});
这恰好解决了这个问题..
希望这可以帮助!
要使req.file
正确,首先必须以正确的方式设置.post()
的参数。用它作为:
router.route('/user/signmeup').post(upload.array('profilePicture', 2),
function(req, res){
console.dir(req.headers['content-type']);
if (err) {
console.log('err', err);
}else{
console.log('coming here');
console.log(req.files);
console.log(req.body);
var reg = new Registration();
let args = { body : req.body, session : req.session };
reg.applyForMembership(args, function(err, result){
res.json(result);
});
}
});