收藏
回答

OPPO R9S Plus wx.uploadFile上传不了图片?

目前就测出这个手机型号有问题,其他OPPO版本或其他品牌没有发现此问题,后台接收不到上传图片的参数,其他手机就可以

手机版本

微信版本:8.0.16

基础库:2.21.1

vant:1.9.2

复现链接:因为是用的vant,创建代码片段后,大小超过1M,分享链接不了


出现的问题

部分代码

参考这个用户奥特曼不吃面就没蓝发大招打小怪兽的视频,出现的情况是一样的


回答关注问题邀请回答
收藏

4 个回答

  • 社区技术运营专员-Jahozheng
    社区技术运营专员-Jahozheng
    2021-12-14

    原生的有问题吗

    2021-12-14
    有用
    回复 14
    查看更多(9)
  • 余温无痕
    余温无痕
    2022-03-23

    经过小程序团队的处理,目前结果如下:

    这里的原因查明了,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能匹配就放过

    2022-03-23
    有用
    回复
  • Zzzzzzzz
    Zzzzzzzz
    2022-03-15

    请问解决了吗?我这边也有这个问题

    2022-03-15
    有用
    回复 1
    • 余温无痕
      余温无痕
      2022-03-23
      看最新回复
      2022-03-23
      回复
  • differ
    differ
    2022-03-03

    我这边也遇到这个问题了,请问现在解决了吗

    2022-03-03
    有用
    回复 1
    • 余温无痕
      余温无痕
      2022-03-23
      看最新回复
      2022-03-23
      回复
登录 后发表内容