小程序的坑比较多,原因在于小程序开发文档相当的不全,所以开发小程序是比较痛苦的,但也正是因为坑多,技术却一步一步的往上升了...不知道该笑还是该哭。
进入正题: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
})
}
})
},