(小程序)多个参数上传服务器

第二篇技术文档

实验项目:QQ小程序

图片和其他参数一起上传服务器问题

小程序与后台的交互要调用wx.request()接口,但同时还要与图片一起传,并且在传图片的同时还要将活动id和这是第几张图片对应的数字一起上传,开始我们在想怎么一次把它上传了,但发现这样做不太好,会很慢,所以最终采取分开异步上传的方式。主要代码如下:

//选择图片
ChooseImage() {
    wx.chooseImage({
      count: 9, //默认9
      sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
      sourceType: ['album'], //从相册选择
      success: (res) => {
        if (this.data.imgList.length != 0) {
          this.setData({
            imgList: this.data.imgList.concat(res.tempFilePaths)
          })
        } else {
          this.setData({
            imgList: res.tempFilePaths
          })
        }
      }
    });
  },
  //预览图片
  ViewImage(e) {
    wx.previewImage({
      urls: this.data.imgList,
      current: e.currentTarget.dataset.url
    });
  },
  //删除图片
  DelImg(e) {
    this.data.imgList.splice(e.currentTarget.dataset.index, 1);
    this.setData({
      imgList: this.data.imgList
    })
  },
//第一部分
wx.request({
        data: {
          title: that.data.title,
          idea_text: that.data.text,
          user_id: app.globalData.userid,
          organizationid_list: orglist
        },
        url: '与服务器的接口',
        success: function (res) {
          let idea_id = res.data;
          wx.hideLoading();
          that.submitImages(idea_id);
          wx.navigateBack();
        },
        fail: function (res) {
        },
      });
    }
  },

上传图片的代码如下:

submitImages(idea_id) {
    let that = this;
    console.log(that.data.imgList);
    for (let i = 0; i < that.data.imgList.length; i++) {
      wx.uploadFile({
        url: '与服务器的接口',
        filePath: that.data.imgList[i],
        name: 'imagefile',
        //在上传图片得同时传的参数如下,使用formData()即可
        formData: {
          idea_id: idea_id,
          count: i,
        },
        success(res) {
          console.log('图片发布成功')
        },
        fail() {
          console.log('上传图片失败');
        }
      })
    }
    wx.showToast({
      title: '发布成功',
      icon: 'success',
      duration: 1000,
      mask: true,
    })
  },

这样即可满足要求,但是上传图片的同时是调用的微信的接口wx.upload()接口,这个有一个问题,就是有时在上传多张图片是会有部分图片上传失败,错误显示是一次性上传的太多了,超过上传最大上限,这个问题不是经常遇到,查了解决办法,建议用递归而不是循环!!!

更改后如下:

submitImages(filePaths, successUp, failUp, i, length,idea_id) {
    wx.uploadFile({
      url: '与服务器的接口',
      filePath: that.data.imgList[i],
      name: 'imagefile',
      formData: {
          idea_id: idea_id,
          count: i,
      },
      success: (res) => {
        var data = JSON.parse(res.data);
        // 把获取到的路径存入imagesurl字符串中
        this.data.imagesurl
        this.setData({
          imagesurl: this.data.imagesurl.concat(data.data)
        })
      },
      fail: (res) => {
      },
      complete: () => {
        i++;
        if (i == length) {
          console.log('总共' + successUp + '张上传成功,' + failUp + '张上传失败!');
        } else { 
        //递归调用
          this.uploadDIY(filePaths, successUp, failUp, i, length,idea_id);
        }
      },
    });

其他地方的交互都与此类似,这个理解通了,万变不离其宗,就会使用了。

附上微信开发者文档wx.request接口知识点链接,供参考使用:
微信开发者文档

最后!希望一起进步!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值