微信小程序上传API接口wx.uploadFile的坑

小程序的坑比较多,原因在于小程序开发文档相当的不全,所以开发小程序是比较痛苦的,但也正是因为坑多,技术却一步一步的往上升了...不知道该笑还是该哭。

进入正题: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
        })
      }
    })
  },


猜你喜欢

转载自blog.csdn.net/charles_tian/article/details/80669530