form-data格式一般是用来进行文件上传的。但后写的登录接口必须让入参以form-data格式传入

1、如果是使用的原生form写的,只需要在form标签上加上
**enctype=“multipart/form-data”**即可。

<form action="example.com" method="post" enctype="multipart/form-data">

2、因为使用的antd中的Form表单组件,还有一种方法就是将传入的数据,利用FormData转成FormData对象,请求就会自动转为form-data类型。不需要手动设置Content-type。
FormData的使用:

 let params = {name: 'superman', pws: '222222'}
 formData.append('user', params )

通过这种方法添加FormData参数user,并不会获取到真正的内容,返回的是userObjObject.prototype.toString.call(userObj)的值作为user字段的值
但FormData对象无法将批量转换成对应的形式,手动写一个方法实现:

function transObjFormData(obj, form, namespace) {
  const fd = form || new FormData();
  let formKey;
  
  for(var property in obj) {
      if(obj.hasOwnProperty(property)) {
        let key = Array.isArray(obj) ? '[]' : `[${property}]`;
        if(namespace) {
          formKey = namespace + key;
        } else {
          formKey = property;
        }
        // 如果是一个对象不是文件或字符串,就使用递归,继续遍历
        if(typeof obj[property] === 'object' && !(obj[property] instanceof File)) {
          transObjFormData(obj[property], fd, formKey);
        } else {
          // 如果是一个字符串传或者文件对象,就直接添加
          fd.append(formKey, obj[property]);
        }
      }
    }
  return fd;
}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐