新手跳坑指南《三十九》wx.uploadFile

2017-01-10

问题描述:

我遇到的问题:手机预览时 wx.uploadFile 自定义 header 不生效。


下面是我的问题描述:

我在使用 wx.uploadFile 这个接口上传文件时,需要在 header 中添加一些自定义的字段,根据文档,我完成了小程序的代码:


新手跳坑指南《三十九》wx.uploadFile 

这是后端接口的代码,用的是 PHP 的 Symfony 框架:


新手跳坑指南《三十九》wx.uploadFile 

代码在开发者工具运行时,可以正确上传文件,后台接口也可以正确获取信息,如上传的文件、额外的 formData 数据和自定义的 header 字段,但在手机预览时,却无法正确获取 header 的自定义字段,添加了 header 的日志记录之后发现,在手机端预览的时候,header 中没有包含我代码中自定义的字段。


我也针对这个测试接口自己写了测试代码:


新手跳坑指南《三十九》wx.uploadFile 

运行如上截图的测试代码并查看日志输出:


新手跳坑指南《三十九》wx.uploadFile 

有开发微信小程序的童鞋也可以做一下测试,现在有点懵逼中。


解决:

在小程序端,我把自定义的 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 反馈渠道,按照官方文档,我尝试过发送邮件给微信开发团队,但始终没有回音。


上面是我最新的测试结果,微信小程序不知道会不会有所修复,又或者是我所用的技术栈所导致的问题,所以这里也希望用其他技术栈的童鞋尝试一下。




0
收藏