Express和Multer上传问题 - req.files始终为空

时间:2016-06-28 02:25:18

标签: file express upload multer

我的快递表单处理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"

gnanajothi@gmail.com
------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: 'gnanajothi@gmail.com',
  password: 'yash',
  confirmPassword: 'yash',
  profilePicture: '[object FileList]' }

前端表单处理和/或在我的应用中配置multer的方式是一个问题。

感谢任何有关这方面的帮助,在过去的几天里一直在努力,似乎没有任何工作。

谢谢, GJ

2 个答案:

答案 0 :(得分:3)

好的,我几个小时都在苦苦挣扎 - 我终于成功了。

问题原来是我必须添加一个名字&#39;属于我的<input type='file' />标记,例如此<input type='file' name='myFileName'>

然后 - 我必须确保在我的闷热设置中 - 我必须具有完全相同的名称&#39; myFileName&#39;在我的array()函数调用中 - 像这样:

router.post('/', multer({dest:'./uploads'}).array('myFileName', 1), function(req, res, next) {});

这恰好解决了这个问题..

希望这有帮助!

答案 1 :(得分:0)

要使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);
            });
        }
});