最近接触到微信小程序接口开发工作,前端小伙伴提醒我上传文件接口返回的是文字,而不是json对象,如下图:

上面一个红框是普通接口返回的内容,下图是微信上传图片返回的内容。很显然普通接口自动反序列化成了json对象,wx.upload方法没有自动反序列化。所以用一种周全的方法解决此问题
wx.uploadFile({ url: url, filePath: audioFile, name: 'audioFile',//这里是上传音频文件类型,按照需求填写 header: { "Content-Type": "multipart/form-data", 'accept': 'application/json', }, formData: { 'token': token, //其他额外的formdata,按需求来 }, success: function (res) { let data = res.data; let status = res.status; // 为什么这么这么写,看下文 if ('object' !== typeof data) { //坑一:与wx.request不同,wx.uploadFile返回的是[字符串],需要自己转为JSON格式 //如果不转换,直接用点运算符是获取不到后台返回的值的 data = JSON.parse(data) status = data.status; } // todo 写你的业务代码了 } })
推荐大家写的时候加上'object' !== typeof data
,防止微信在今后版本修复这个bug,导致你的代码会报错,推荐大家这么写