小程序
小游戏
企业微信
微信支付
扫描小程序码分享
目前就测出这个手机型号有问题,其他OPPO版本或其他品牌没有发现此问题,后台接收不到上传图片的参数,其他手机就可以
手机版本
微信版本:8.0.16
基础库:2.21.1
vant:1.9.2
复现链接:因为是用的vant,创建代码片段后,大小超过1M,分享链接不了
出现的问题
部分代码
参考这个用户奥特曼不吃面就没蓝发大招打小怪兽的视频,出现的情况是一样的
4 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
原生的有问题吗
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
经过小程序团队的处理,目前结果如下:
这里的原因查明了,upload的时候,如果开发者有传form-data,那form-data也是带boundary的,我们客户端Content-Type和form-data的boundary是统一的,后台收到请求后会校验这两者是否一致,如果不一致会返回500
什么情况下会不一致?
1.开发者传了Content-Type,没有带boundary
2.开发者传了Content-Type,带的boundary和我们底层获取到的boundary不一致
为什么只在oppo机型上出现?
客户端的header是存在hashmap中的,hashmap插入值是无序的,在oppo机型上,开发者传入的Content-Type在客户端添加的Content-Type之后,在无问题的机器上,开发者传入的Content-Type在客户端添加的Content-Type之前,而后台是逆序判断header数据,所以如果先拿到开发者的Content-Type,就会命中不一致的情况,从而报错
如果在oppo的机器上,强制把开发者传入的Content-Type放在客户端添加的Content-Type之前,那么oppo的机器上也能正常运行
为什么用hashmap
hashmap相比treemap,linkhashmap读取效率更高,header本身也没有规定元素顺序
修改建议
这里问题的本质是后台会校验form-data的boundary
必须和Content-Type中的boundary一致,而form-data的boundary是开发者无法修改的,所以建议开发者不传Content-Type,或者后台在处理header时,便利所有的Content-Type,只要有一个boundary能匹配就放过
请问解决了吗?我这边也有这个问题
我这边也遇到这个问题了,请问现在解决了吗
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
原生的有问题吗
经过小程序团队的处理,目前结果如下:
这里的原因查明了,upload的时候,如果开发者有传form-data,那form-data也是带boundary的,我们客户端Content-Type和form-data的boundary是统一的,后台收到请求后会校验这两者是否一致,如果不一致会返回500
什么情况下会不一致?
1.开发者传了Content-Type,没有带boundary
2.开发者传了Content-Type,带的boundary和我们底层获取到的boundary不一致
为什么只在oppo机型上出现?
客户端的header是存在hashmap中的,hashmap插入值是无序的,在oppo机型上,开发者传入的Content-Type在客户端添加的Content-Type之后,在无问题的机器上,开发者传入的Content-Type在客户端添加的Content-Type之前,而后台是逆序判断header数据,所以如果先拿到开发者的Content-Type,就会命中不一致的情况,从而报错
如果在oppo的机器上,强制把开发者传入的Content-Type放在客户端添加的Content-Type之前,那么oppo的机器上也能正常运行
为什么用hashmap
hashmap相比treemap,linkhashmap读取效率更高,header本身也没有规定元素顺序
修改建议
这里问题的本质是后台会校验form-data的boundary
必须和Content-Type中的boundary一致,而form-data的boundary是开发者无法修改的,所以建议开发者不传Content-Type,或者后台在处理header时,便利所有的Content-Type,只要有一个boundary能匹配就放过
请问解决了吗?我这边也有这个问题
我这边也遇到这个问题了,请问现在解决了吗