记一次微信小程序直传OSS,自定义参数无法正常携带的问题
结论
如题。如果使用微信小程序直传OSS还需要携带自定义参数,将自定义参数命名方式改为下划线方式!
排查过程
因有需求微信小程序用户上传文件,考虑到使用了阿里云的OSS云存储服务,所以就需要微信小程序直传OSS,参照官方教程,已经上传OK了(不建议微信小程序先上传服务器,再服务器转到OSS,会牺牲服务器负载),嗯,很丝滑~
但是,做业务的话,由前端标记上传资源总是不可靠的,所以需要使用OSS的上传回调功能,所有自然就有了对接自定义参数,将业务id回传到服务器。
参照OSS上传回调配置,构造callback
和callback-var
,发现如下问题:
- url拼接参数方式,服务器收不到oss回调
不知原因,提工单后回复没有意义
- header追加方式,服务器收不到oss回调
不知原因,提工单后回复没有意义
- post追加表单参数,服务器收到oss回调
所以鉴于以上测试结果,只能用post方式进行上传文件,但是回调接口发现,自定义的业务id无法正常传递,分析原因:
- wx.uploadFile,追加表单参数看不到payload
- wx.request,无法上传文件
- 提工单已读乱回
没办法,开始了磨人的调试阶段,发现OSS上传回调配置,自定义参数写作:
{"x:my_var": "var"}
而我的自定义参数命名为:
{"x:myVar": "var"}
修改对应位置policy和formData中的自定义参数为下划线命名方式,传递自定义参数成功!
真坑啊,想给这个接口的同学寄刀片
运行环境
不同运行环境和软件版本可能表现不一样, 本文提供参考
- Windows 11 23H2
- 微信开发者工具 RC 1.06
- golang 1.21.5 windows/amd64
- gin v1.10.0
- 花生壳 8.11.0