小程序
小游戏
企业微信
微信支付
扫描小程序码分享
用wx.uploadFile,循环上传图片的话,可以一次同时上传几张图片嘛,因为同时还有其他参数要上传,循环的话就一起循环了
4 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
Promise.all
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
/* uploadFile 上传文件公共方法 @params: successCb 回调函数 @params: data 已存在的图片,用来判断还可以上传几张 @params: together 是否用for循环一起上传,false的话就用自循环一张一张上传有then去监听完成上传 */ uploadFiles(successCb, data, isTogether = true, count = 9) { return new Promise(resolve => { // 一共选了几张 wx.chooseImage({ count: count - data.length, // 默认9 sizeType: ["compressed"], // 可以指定是原图还是压缩图,默认二者都有 sourceType: ["album", "camera"], // 可以指定来源是相册还是相机,默认二者都有 success: (res) => { let uploadImgList = res.tempFilePaths if(uploadImgList.length) { wx.showLoading({ title: '正在上传照片' }) if(isTogether) { this.uploadImgFilesTogether(this, uploadImgList, successCb) } else { this.uploadImgFiles(this, uploadImgList, successCb).then(res => { resolve(res) }) } } } }) }); }, // 自执行上传,一张传完后下一张 uploadImgFiles(that, tempFilePaths, successCb) { return new Promise(resolve => { let index = 0 let result = [] function uploads() { that.uploadImgFile([tempFilePaths[index]], successCb, true).then(res => { index++ result.push(res) if(index < tempFilePaths.length) { uploads() } else { let successArr = result.filter(i => i === true) let failArr= result.filter(i => i === false) resolve({ total: result.length, // 上传总数 successLen: successArr.length, // 上传成功 failLen: failArr.length, //上传失败 }) } }) } uploads() }) }, // 循环上传,大家一起上传 uploadImgFilesTogether(that, tempFilePaths, successCb) { for(let i=0;i { wx.uploadFile({ url: 'xxx', filePath: path[0], name: "image", header: { chartset: "utf-8", "content-type": "multipart/form-data" }, formData: { token: 'xxx' }, success: (res) => { if (res.statusCode !== 200) { resolve(false) !isNext && wx.showToast({title: '上传失败,请稍后重试'}) return; } else { try { let data = JSON.parse(res.data); if (data.success) { resolve(true) successCb && successCb(data.data); } else { resolve(false) !isNext && wx.showToast({title: '上传失败,请稍后重试'}) return; } } catch (err) { resolve(false) !isNext && wx.showToast({title: '上传失败,请稍后重试'}) return; } } }, fail: (e) => { resolve(false) !isNext && wx.showToast({title: '上传失败,请稍后重试'}) } }) }); },
其他参数在你这些图片上传成功后返回oss地址后,你通过字符串拼接再跟你的其他参数一起提交。
暂不支持,但能选择多张图片,封装一下上传方法,写个循环可解决问题。
目前只能循环上传
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
Promise.all
/* uploadFile 上传文件公共方法 @params: successCb 回调函数 @params: data 已存在的图片,用来判断还可以上传几张 @params: together 是否用for循环一起上传,false的话就用自循环一张一张上传有then去监听完成上传 */ uploadFiles(successCb, data, isTogether = true, count = 9) { return new Promise(resolve => { // 一共选了几张 wx.chooseImage({ count: count - data.length, // 默认9 sizeType: ["compressed"], // 可以指定是原图还是压缩图,默认二者都有 sourceType: ["album", "camera"], // 可以指定来源是相册还是相机,默认二者都有 success: (res) => { let uploadImgList = res.tempFilePaths if(uploadImgList.length) { wx.showLoading({ title: '正在上传照片' }) if(isTogether) { this.uploadImgFilesTogether(this, uploadImgList, successCb) } else { this.uploadImgFiles(this, uploadImgList, successCb).then(res => { resolve(res) }) } } } }) }); }, // 自执行上传,一张传完后下一张 uploadImgFiles(that, tempFilePaths, successCb) { return new Promise(resolve => { let index = 0 let result = [] function uploads() { that.uploadImgFile([tempFilePaths[index]], successCb, true).then(res => { index++ result.push(res) if(index < tempFilePaths.length) { uploads() } else { let successArr = result.filter(i => i === true) let failArr= result.filter(i => i === false) resolve({ total: result.length, // 上传总数 successLen: successArr.length, // 上传成功 failLen: failArr.length, //上传失败 }) } }) } uploads() }) }, // 循环上传,大家一起上传 uploadImgFilesTogether(that, tempFilePaths, successCb) { for(let i=0;i { wx.uploadFile({ url: 'xxx', filePath: path[0], name: "image", header: { chartset: "utf-8", "content-type": "multipart/form-data" }, formData: { token: 'xxx' }, success: (res) => { if (res.statusCode !== 200) { resolve(false) !isNext && wx.showToast({title: '上传失败,请稍后重试'}) return; } else { try { let data = JSON.parse(res.data); if (data.success) { resolve(true) successCb && successCb(data.data); } else { resolve(false) !isNext && wx.showToast({title: '上传失败,请稍后重试'}) return; } } catch (err) { resolve(false) !isNext && wx.showToast({title: '上传失败,请稍后重试'}) return; } } }, fail: (e) => { resolve(false) !isNext && wx.showToast({title: '上传失败,请稍后重试'}) } }) }); },
其他参数在你这些图片上传成功后返回oss地址后,你通过字符串拼接再跟你的其他参数一起提交。
暂不支持,但能选择多张图片,封装一下上传方法,写个循环可解决问题。
目前只能循环上传