【问题标题】:Express and Multer upload issue - req.files is always emptyExpress 和 Multer 上传问题 - req.files 始终为空
【发布时间】:2016-10-30 04:24:32
【问题描述】:

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

【问题讨论】:

  • 您找到解决方案了吗?如果可以,您可以添加答案吗?

标签: file express upload multer


【解决方案1】:

好吧,我为此苦苦挣扎了好几个小时 - 我终于设法让它工作了。

问题原来是我必须在我的<input type='file' /> 标记中添加一个“名称”属性,就像这样<input type='file' name='myFileName'>

然后 - 我必须确保在我的 multer 设置中 - 我必须在我的 array() 函数调用中具有完全相同的名称“myFileName” - 像这样:

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

这恰好解决了问题..

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    要正确获取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);
                });
            }
    });
    

    【讨论】:

      猜你喜欢
      • 2020-06-09
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 2018-12-21
      • 2015-10-14
      相关资源
      最近更新 更多