抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

在钉钉和浙政钉项目里有上传功能的需求,安卓可以正常上传,但是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的方法很多,大家根据自己的项目情况来实现。
  • 我只测试过浙政钉和钉钉,估计浙里办也会有这样的情况,也可以这样配置试一下。

评论