微信小程序 - 手机预览时 wx.uploadFile 自定义 header 不生效
问题描述
我遇到的问题:手机预览时 wx.uploadFile
自定义 header 不生效。
下面是我的问题描述:
我在使用 wx.uploadFile
这个接口上传文件时,需要在 header 中添加一些自定义的字段,根据文档,我完成了小程序的代码:
这是后端接口的代码,用的是 PHP 的 Symfony 框架:
代码在开发者工具运行时,可以正确上传文件,后台接口也可以正确获取信息,如上传的文件、额外的 formData 数据和自定义的 header 字段,但在手机预览时,却无法正确获取 header 的自定义字段,添加了 header 的日志记录之后发现,在手机端预览的时候,header 中没有包含我代码中自定义的字段。
我也针对这个测试接口自己写了测试代码:
运行如上截图的测试代码并查看日志输出:
有开发微信小程序的童鞋也可以做一下测试,现在有点懵逼中。
在小程序端,我把自定义的 header 字段放到了 formData 的位置,后端就可以正常接收自定义的 header 字段了。
但我还是有点懵逼,难道文档是用来骗人的?
补充:
测试时使用到:
微信开发者工具 v0.11.112300
手机预览 iPhone6s 微信6.3.31
后台使用 Symfony 3.1.7
PHP 5.6.28
Nginx
经过测试,发现小程序在调用 wx.uploadFile 目前(不知道微信开发团队后续会怎样修复)是如下情况:
如果在微信开发者工具想正确传递自定义 header 到后台接口时,只需要按照官方文档所说,把自定义 header 放在 wx.uploadFile 接口的 header 配置选项。
如果想在手机预览正确传递自定义 header 到后台接口时,就要把自定义 header 放到 wx.uploadFile 接口的 formData 配置选项。
前方有坑!
在使用 wx.uploadFile 时,配置选项中 formData 使用时,在开发者工具和手机预览时,又有出入(什么鬼!)。
举个例子,我需要在上传文件时传递一个额外的 flag 到后台接口,这个 flag 的值是 true,经过测试,发现小程序目前得出的结果是:
如果想在微信开发者工具正确传递这个 flag 到后台接口,则可以用如下代码传递:
wx.uploadFile({
// 省略其他
formData: {
flag: true
}
})
如果想在手机预览正确传递这个 flag 到后台接口,则需要用如下代码传递:
wx.uploadFile({
// 省略其他
formData: {
flag: 'true'
}
})
其实看了官方文档,的确是有看到 formData 的属性值有用引号引起来,但却没有在文档中做出说明,而且,这个用法在微信开发者工具和在手机预览时有着明显的区别。
如上,如果在手机预览时,flag 的值没有使用引号引起来,则后台通过 request 是获取不了的(黑人问号.jpg)。
在这里吐槽一下微信小程序没有提供一个很好的 bug 反馈渠道,按照官方文档,我尝试过发送邮件给微信开发团队,但始终没有回音。
上面是我最新的测试结果,微信小程序不知道会不会有所修复,又或者是我所用的技术栈所导致的问题,所以这里也希望用其他技术栈的童鞋尝试一下。
这篇关于微信小程序 - 手机预览时 wx.uploadFile 自定义 header 不生效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!