最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 小程序实现上传多张本地图片到服务器和图片预览

    正文概述 掘金(鹏多多)   2020-12-11   530

    前言:最近在写小程序,用到了wx.uploadFile方法,发现这方法居然不支持同时上传多个文件,于是自己写了一个上传多个的方法;

    小程序实现上传多张本地图片到服务器和图片预览

    楼主做的是用户投诉页面;需求是用户上传最多三张图片,最后把图片和文字和用户信息等一起提交给服务器;

    小程序实现上传多张本地图片到服务器和图片预览UI样式

    楼主的解决思路是定义一个递归函数,递归调用wx.uploadFile上传,全部完成后结束递归,
    代码如下;

    this.data里的数据

    /**
    * 页面的初始数据
    */
    data: {
     imgs:[],//上传图片列表
     imgPath:[],//已上传成功的图片路径
    },
    

    上传图片代码

    // 上传照片
    chooseImg (e) {
      const _this = this;
      let imgs = this.data.imgs;
      let imgNumber = this.data.imgs.length;//当前已上传的图片张数
      if(imgNumber >= 3){
        FN.Toast("超出上传个数");
        return false;
      }else{
        imgNumber = 3 - imgNumber;
      };
      wx.chooseImage({//打开本地相册选择图片
        count: imgNumber,
        sizeType: ['original', 'compressed'],
        sourceType: ['album', 'camera'],
        success (res) {
          const tempFilePaths = res.tempFilePaths;
          for(let i = 0;i < tempFilePaths.length; i++){
            imgs.push(tempFilePaths[i]);
          }
          _this.setData({//赋值,回显照片
            imgs: imgs
          });
          let successUp = 0; //成功
          let failUp = 0; //失败
          let count = 0; //第几张
          let length = tempFilePaths.length; //总数
          _this.recursionUploading(tempFilePaths, successUp, failUp, count, length);//调用上传方法
        }
      })
    },
    

    递归上传方法

    //采用递归的方式上传图片
    recursionUploading(imgPaths, successUp, failUp, count, length){
      var _this = this;
      wx.showLoading({
      title: '正在上传第' + count + '张',
      });
      wx.uploadFile({
        url: `${app.globalData.baseURL}/api接口地址`,
        filePath: imgPaths[count],
        formData:{
          userId:app.globalData.userMsg.userId
        },
        name: "uploadImage",
        header: {
          'content-type': 'multipart/form-data'
        }, 
        success (e) {
          console.log(e)
          let path = _this.data.imgPath;
          let obj = e.data;
          if(obj.status === "y"){
            path.push(obj.infoObject);
            _this.setData({
              imgPath:path
            });
          }
          successUp++;//成功+1
        },
        fail (e) {
          failUp++;//失败+1
        },
        complete (e) {
          count++;//下一张
          if(count == length){
          	FN.Toast(`上传成功${successUp}`)
          }else{
            //递归调用,上传下一张
            _this.recursionUploading(imgPaths, successUp, failUp, count, length);
          }
        }
      })
    },
    

    预览大图

    // 预览大图
    lookBigImg (e) {
      let index = e.currentTarget.dataset.index;//索引
      let big = this.data.imgs[index];
      wx.previewImage({
        current: big, // 当前显示图片的http链接
        urls: this.data.imgs // 需要预览的图片http链接列表
      })
    },
    

    如果看了觉得有帮助的,欢迎 点赞 关注 评论;
    END


    起源地下载网 » 小程序实现上传多张本地图片到服务器和图片预览

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元