微信小程序 - 手机预览时 wx.uploadFile 自定义 header 不生效

查看:513
本文介绍了微信小程序 - 手机预览时 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆