微信小程序上传多图到服务器并获取返回的路径

  

微信小程序上传图片很简单:

     //点击选择图片   chooseimage:函数(){   var=这个;   wx.chooseImage ({//数:9日默认9   sizeType:“原始”、“压缩”,//可以指定是原图还是压缩图,默认二者都有   sourceType:“专辑”,“相机”,//可以指定来源是相册还是相机,默认二者都有   成功:函数(res) {   that.setData ({   tempFilePaths: that.data.tempFilePaths.concat (res.tempFilePaths)//在已有的基础上进行拼接   })   }   })   },      

这里的setData里面是当你选择照片之后,再一次出发函数时候,会在原有的基础上增加照片,而不是覆盖掉,有兴趣可以看一下concat的含义

  

这里就选择了照片,可以显示在界面上

        & lt;图像类="形象" background-size=鞍碧炱?为=" {{tempFilePaths}} " src=" https://www.yisu.com/zixun/{{项}}’   数据id=皗{指数}}”bindtap='删除'祝辞& lt;/image>      

效果图:

  

微信小程序上传多图到服务器并获取返回的路径”> <br/>
  </p>
  <p>然后是多图上传的过程,这里我上传到公司oss里面,源码:</p>
  
  <pre类=   上传:函数(){   (var=0;我& lt;this.data.tempFilePaths.length;我+ +){//console.log (“000”)   this.upload_file (this.data.tempFilePaths[我])   }   },   upload_file:函数(filepath) {   var=这个;   wx.uploadFile ({   url: https://* * * * * * * * * * * * * * * * * * * * * * */一个',   标题:{   “内容类型”:“多部分/格式”   },   filePath: filePath,   名称:“文件”,   formData: {   文件:filepath   },   成功:函数(res) {   that.setData ({   mes: JSON.parse (res.data),   图片:that.data.images.concat (JSON.parse (res.data) .data.filePath)//把字符串解析成对象   })//console.log (that.data.mes.data.filePath)//console.log (that.data.images。长度+”* * * * * * * * * *”)//wx.showToast ({//标题:“成功”,//})   },   失败:函数(res) {   wx.showToast ({   标题:“图片加载失败”,   })   }   })   }      

其实到这里都没有太大的问题。

  

但是当我点击提交的时候,就会出现图片为空的问题,这是因为,我们在提交的事件中肯定是先写上传图片的方法,

  

让后是提交的方法,但是由于微信小程序是异步,在为循环没有执行完就触发了提交的事件,这造成图片为空的问题。

  

我搜了很多答案出来,但是由于是接触不久,完全没看懂,什么Promis之类的,只能自己想办法,就在选择图片的时候就把图片上传了,然后返回路径:

     //点击选择图片   chooseimage:函数(){   var=这个;   wx.chooseImage ({//数:9日默认9   sizeType:“原始”、“压缩”,//可以指定是原图还是压缩图,默认二者都有   sourceType:“专辑”,“相机”,//可以指定来源是相册还是相机,默认二者都有   成功:函数(res) {   that.setData ({   tempFilePaths: that.data.tempFilePaths.concat (res.tempFilePaths)//在已有的基础上进行拼接   })   that.upload ();   that.setData ({   临时:that.data.tempFilePaths。//用长度来解决的循环比异步快   })   }   })   },            上传:函数(){   我对(var=this.data.temp;我& lt;this.data.tempFilePaths.length;我+ +){//console.log (“000”)   this.upload_file (this.data.tempFilePaths[我])   }   },      

你会发现我加了一个临时工,这样就会解决问题,可以实现上传,但是删除的时候需要把上传的也删除掉,而不是单单的吧集合里面的删除掉。

  

源码:
  

     //页面/评论/cmment.js   const应用=getApp ()   页面({/* *   *页面的初始数据   */数据:{   mes: {},   内容:”,   tempFilePaths: [],   用户信息:{},   hasUserInfo:假的,   canIUse: wx.canIUse(“button.open-type.getUserInfo”),   图片:[],   温度:0,   infoId:”,   sendtype:“   },/* *   * 生命周期函数--监听页面加载   */onLoad:功能(选项){   console.log (options.infoId +“infoID”)   this.setData ({   infoId: options.infoId,   sendtype: options.sendtype   })      },/* *   *页面上拉触底事件的处理函数   */onReachBottom:函数(){      },   confirmSubmit:函数(e) {      console.log (e.detail.value)   },//点击选择图片   chooseimage:函数(){   var=这个;   wx.chooseImage ({//数:9日默认9   sizeType:“原始”、“压缩”,//可以指定是原图还是压缩图,默认二者都有   sourceType:“专辑”,“相机”,//可以指定来源是相册还是相机,默认二者都有   成功:函数(res) {   that.setData ({   tempFilePaths: that.data.tempFilePaths.concat (res.tempFilePaths)//在已有的基础上进行拼接   })   that.upload ();   that.setData ({   临时:that.data.tempFilePaths。//用长度来解决的循环比异步快   })   }   })   },//点击删除图片   删除:函数(e) {   var指数=e.currentTarget.dataset.id;   this.data.tempFilePaths.splice(指数(1)//渲染数据   this.setData ({   tempFilePaths: this.data.tempFilePaths   })   },//提交评论   formBindsubmit:函数(e) {//console.log (this.data.images。长度+“* * * * *”);//(var=0;我& lt;this.data.images.length;我+ +){//console.log (this.data.images[我]);//}   console.log (this.data.infoId +“infoID不能用?”)   wx.request ({   url: https://* * * * * * */saveComments ',   方法:“文章”,   标题:{   “内容类型”:“application/json”,   “用户令牌”:“OXJ * * * * *”,//usertoken   },   数据:{   relevantId: this.data.infoId,   类型:1//this.data.type   内容:e.detail.value.content,   图片:this.data.images,   },   成功:函数(res) {   如果(res.statusCode=200) {   wx.showModal ({   标题:“提示”,   内容:“评论成功”,   })   返回;   }   其他{   wx.showModal ({   标题:“提示”,   内容:“评论失败”,   })   }   }   })//wx.navigateTo ({//url:“. ./文章/文章# 63;id=" + this.data.infoId//})   },   上传:函数(){   我对(var=this.data.temp;我& lt;this.data.tempFilePaths.length;我+ +){//console.log (“000”)   this.upload_file (this.data.tempFilePaths[我])   }   },   upload_file:函数(filepath) {   var=这个;   wx.uploadFile ({   url: https://* * * * * * * */类/上传/一个”,   标题:{   “内容类型”:“多部分/格式”   },   filePath: filePath,   名称:“文件”,   formData: {   文件:filepath   },   成功:函数(res) {   that.setData ({   mes: JSON.parse (res.data),   图片:that.data.images.concat (JSON.parse (res.data) .data.filePath)//把字符串解析成对象   })//console.log (that.data.mes.data.filePath)//console.log (that.data.images。长度+”* * * * * * * * * *”)//wx.showToast ({//标题:“成功”,//})   },   失败:函数(res) {   null   null   null   null   null   null   null   null   null

微信小程序上传多图到服务器并获取返回的路径