收藏
回答

wx.uploadFile 上传文件失败

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.uploadFile 微信安卓客户端 最新版本 2.20.0

问题补充

安卓5,6,7 安卓最新版微信(8.0.15)基础库2.20.0 该现象发生率 100%

小程序使用wx.uploadFile上传图片到后端,接口调用成功,后端用的MultipartFile接收时候发现缺少boundary参数,后台报错:the request was rejected because no multipart boundary was found,出现的概率大概1%

org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request;
 nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: 
    the request was rejected because no multipart boundary was found
最后一次编辑于  2021-10-20
回答关注问题邀请回答
收藏

4 个回答

  • 啊啊啊啊啊锋子阿
    啊啊啊啊啊锋子阿
    2021-11-23

    让前端检查,是否在使用了wx.uploadFile时候,自己写了一个content-Type;

    出现这个bug的原因是boundary字段缺失,在大部分机型上,微信定义的content-type会在后面,所以不会影响,测试也测不出来,而在小部分机型,自定义的content-type会在后面,导致boundary字段缺失;

    解决建议: 不自己添加content-type字段

    2021-11-23
    有用 5
    回复
  • Cjiang
    Cjiang
    2021-10-20

    你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    麻烦在手机微信那里上传下日志: 我->设置->帮助与反馈右上角有个上报日志的入口,麻烦提供一下微信号,时间点(具体到分钟)


    2021-10-20
    有用 2
    回复 10
    • ZHY
      ZHY
      发表于移动端
      2021-10-20
      从昨天开始越来越多的用户反馈了,求官方重视,另外怀疑是官方根据uid和设备进行的灰度测试。 以下是用户测试的反馈 “ 我微信在他人手机上登录能上传图片成功,他人微信在我手机上传图片也能成功,可就是我上传失败,什么问题呢?怪了!”
      2021-10-20
      回复
    • 欢乐马
      欢乐马
      2021-10-21
      日志时间:开始操作时间 2021-10-21 14:05:20 操作结束 14:05:50 型号: 微信版本:8.0.15.2020,基础库版本: 2.20.0(2021.10.8 23.41.39) 系统版本: 安卓7.0, 这个前端只会显示上传出错,报错日志在后端,所以不需要前端代码。整个操作不到一分钟,共操作六次,全都失败
      2021-10-21
      回复
    • 欢乐马
      欢乐马
      2021-10-21
      微信ID: damonchenwxid
      2021-10-21
      回复
    • 欢乐马
      欢乐马
      2021-10-21
      机型: 荣耀8
      2021-10-21
      回复
    • Cjiang
      Cjiang
      2021-10-21回复欢乐马
      这个你们可以自查一下:
      请求的header里设置了两次 "Content-Type" :
      1. Content-Type multipart/form-data; boundary=1634796333288 
      2. content-type multipart/form-data
      后一次的content-type没有带boundary导致请求失败了
      2021-10-21
      1
      回复
    查看更多(5)
  • 草料二维码
    草料二维码
    2021-10-21

    同样的情况。我们的问题已经解决了。是因为 微信小程序uploadFile方法,HTTP请求中的Content-Type缺少了boundary。


    正确的应该是:multipart/form-data; boundary=xxxxx

    实际接收到的是:multipart/form-data;


    服务端无法根据boundary来区分form-data的fields,因此无法处理请求导致上传发生错误。


    我们解决方案:


    在网关层编写了一个中间件应用在上传服务器前,判断请求的Content-Type是中不存在boundary时。从Request Body中获取第一行(就是boundary),去掉前缀"--",放到header中。


    举例:

    Body内容如下:

    --1634813444

    Content-Disposition: form-data; name="Filedata"; filename="aaa.pdf"; filename*="UTF-8''aa.pdf"

    <aa.pdf>

    --1634813444

    Content-Disposition: form-data; name="resotype"

    1

    --1634813444--


    获取"--1634813444",并去掉前缀"--"。得到 Content-Type: multipart/form-data; boundary=1634813444,服务端就可以正常处理请求。


    2021-10-21
    有用 3
    回复
  • 等风来不如追风去
    等风来不如追风去
    2022-08-02

    在请求头里,加一个'X-Requested-With': 'XMLHttpRequest',将请求变为ajax请求,亲测有效

    2022-08-02
    有用
    回复 1
    • cc
      cc
      2022-11-01
      想请问一下你们的在真机上请求时,content-type不会自动添加boundary=WABoundary+xxxxxxx 吗
      2022-11-01
      回复
登录 后发表内容