ios 使用钉钉(专有钉钉、浙政钉)嵌入的h5 formData 无法正常使用

前言

在钉钉和浙政钉项目里有上传功能的需求,安卓可以正常上传,但是ios就是无法上传成功,得到的对象结构是 Object { appendData : …, realFormData : …},后端就无法接受到

axios配置

  • 平常的请求方法
/**
 * 作者:作者
 * 时间:2022/10/27 14:41:30
 * 功能:上传文件
 */
export const informUploadFile= (params) => {
  return request({
     url: '/h5/inform/uploadFile',
     zwApi: 'mgop.zy.znj.informUploadFile',
     method: 'post',
     data: params,
     noToken: false,
     headers: {
       "Content-type": "multipart/form-data"
     },
  });
};

优化后的方法

  • 需要在axios里单独加配置
  • 方法里加入区分 ios 和安卓的变量
let ran = navigator.userAgent
let isAndroid = ran.indexOf('Android') > -1 || ran.indexOf('Linux') > -1
let isIOS = !!ran.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)

// 上传附件
export function informUploadFile(params){
  let option = {
    url: '/h5/inform/uploadFile',
    zwApi: 'mgop.zy.znj.informUploadFile',
    method: 'post',
    data: params,
    noToken: false,
    headers: {
      "Content-type": "multipart/form-data"
    },
  }

  if (isIOS) {
    option = {
      url: '/h5/inform/uploadFile',
      zwApi: 'mgop.zy.znj.informUploadFile',
      method: 'post',
      data: params,
      noToken: false,
      headers: {
        "Content-type": "multipart/form-data"
      },
      // 这是重点,本人测试过,加上这个配置,安卓又不可以了,所以区分安卓和ios
      transformRequest: (data) => { data.toString = () => "[object FormData]"; return data; }
    }
  }

  return request(option)
}

小结

  • 区分安卓和ios的方法很多,大家根据自己的项目情况来实现。
  • 我只测试过浙政钉和钉钉,估计浙里办也会有这样的情况,也可以这样配置试一下。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

故蓝寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值