记录一下这几天费尽心力解决的一个bug,关于axios库的。
这是我使用antd库的Input组件自定义的上传函数
这是上传的文件,这里嵌入了一个裁剪的小插件clipic,问题发生在裁剪完成之后,在下方红色方框内将文件上传的时候
之前一直的写法是这样,这里的Axios是经过了全局配置的,设置了headers,ContentType等等,没毛病
除了QQ浏览器 ,其他浏览器从来没有出现过文件上传失败的情况。
前几天线上反馈回来bug说在手机的qq浏览器一直上传失败,经过不懈努力终于找到了问题,一般来说浏览器会自动帮我们加上Content-Type:application/json这种请求头,普遍也是使用这种。
但在上传文件的时候,后端需要的请求头是Content-Type:multipart-formData,并且正常的文件上传会带一串分隔符,像这样
但在手机qq浏览器上传时抓包看到的数据发出去是{}空的,并且请求头还是json.总觉得qq浏览器把什么东西过滤了。后来几经辗转,才找到是axios库的问题,之前一直以为是不支持formData还是什么的。最终在上传的地方把axios换成fetch去请求才解决了问题。
另外还有一个是,这种不兼容的情况不是每个版本的qq浏览器都有,在我手机上反正是有这种情况,设备是iphone12,系统是15.0,qq浏览器是13.0.5。
并且还有个不兼容的是,不支持使用form表单改文件名,像这样。最后让后端增加了字段,把文件名存到另一个字段里才解决这个问题。
虽然使用fetch解决了这个问题,但axios不支持的原因还是不太知道,如果有大佬知道的,还请解答下噢~