最近在写小程序,用到了wx.uploadFile
方法,发现这方法竟然不支持同时上传多个文件,因而本身写了一个上传多个的方法。javascript
博主作的是用户投诉页面;需求是用户上传最多三张图片,最后把图片和文字和用户信息等一块儿提交给服务器;html
博主的解决思路是定义一个递归函数,递归调用wx.uploadFile
上传,所有完成后结束递归。java
this.data里的数据git
/** * 页面的初始数据 */ data: { imgs:[],//上传图片列表 imgPath:[],//已上传成功的图片路径 },
上传图片代码github
// 上传照片 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连接列表 }) },
若是看了以为有帮助的,我是@鹏多多,欢迎 点赞 关注 评论;
ENDapi
往期文章服务器
我的主页微信