小程序的坑比较多,原因在于小程序开发文档相当的不全,所以开发小程序是比较痛苦的,但也正是因为坑多,技术却一步一步的往上升了...不知道该笑还是该哭。
进入正题:wx.uploadFile的坑
坑一:返回的数据格式不是JSON格式(需要自己用JSON.parse()转化格式);
坑二:返回的数据值用点运算符有时获取不到(只能通过对象的属性名获取obj['name'])
代码详解:
handleData: function (token, audioFile) { let that = this; let url = 'https://www.xxx.com/......';//此处换上你的接口地址 wx.uploadFile({ url: url, filePath: audioFile, name: 'audioFile',//这里是上传音频文件类型,按照需求填写 header: { "Content-Type": "multipart/form-data", 'accept': 'application/json', }, formData: { 'token': token, //其他额外的formdata,按需求来 }, success: function (res) { //坑一:与wx.request不同,wx.uploadFile返回的是[字符串],需要自己转为JSON格式 //如果不转换,直接用点运算符是获取不到后台返回的值的 let datas = JSON.parse(res.data) let status = datas.status; let msg = datas.msg; //坑二:一般来说,转化之后的数据是能用点运算符获取的,但是如果大的对象里又包含超级多的对象,也就是对象层层嵌套,有十个嵌套之多,那么用点运算符有时候会出现获取不到值的情况。那么这时需要通过对象的属性名获取到值,也是要这样写:let id = datas['attr1']['attr2']['attr3']...['attr10']['id'];才能获取到 if (status == "2") { //codes go here setTimeout(function () { //调用保存音频文件到本地 that.saveRecordingFile(audioFile) }, 500) } else { wx.showToast({ title: '上传失败,请重试!', }) return; } }, fail: function (res) { wx.showModal({ title: '提示', content: '上传失败,请重试!', }) return; }, }) }, saveRecordingFile: function (audioFile) { let that = this; wx.saveFile({ tempFilePath: audioFile, success: function (res) { let savedFilePath = res.savedFilePath; that.setData({ savedFilePath: savedFilePath }) } }) },