ios 使用钉钉(专有钉钉、浙政钉)嵌入的h5 formData 无法正常使用
在钉钉和浙政钉项目里有上传功能的需求,安卓可以正常上传,但是ios就是无法上传成功,得到的对象结构是 Object { appendData : ..., realFormData : ...},后端就无法接受到
axios配置
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" }, transformRequest : (data ) => { data.toString = () => "[object FormData]" ; return data; } } } return request (option) }
小结
区分安卓和ios的方法很多,大家根据自己的项目情况来实现。
我只测试过浙政钉和钉钉,估计浙里办也会有这样的情况,也可以这样配置试一下。