前言

最近,项目需要新加一个用户发布文章的功能,因为小程序选取的图片都是临时路径,所以需要上传到服务器转为网络图片路径再发布出去。但是小程序上传图片只支持单张图片,在这种情况下图片的上传完成后输出的顺序、判断图片是否全部上传完成等,都是一些需要注意的点。在 Promise 的中有一个 Promise.all 的方法(简单来说就是当所有的异步请求成功后才会执行),在这个方法的帮助下,这些问题都迎刃而解。

代码

export const uploadImage = (tempFilePaths)=>{return new Promise((presolve,preject)=>{if({}.toString.call(tempFilePaths)!='[object Array]'){throw new TypeError(`上传图片参数 tempFilePaths 类型错误!`)}//路径数组为空时  不上传if(tempFilePaths.length==0){presolve([])return}wx.showLoading({title: '上传图片中...',mask:true});getToken().then(token => {let uploads = []tempFilePaths.forEach((item,i)=>{uploads[i] = new Promise ((resolve)=>{wx.uploadFile({url:'http://www.baidu.com/post',filePath: item,name: 'file',header:{'Content-Type':'multipart/form-data'},formData:{appName:tbl,token:token,method:'file',action:'uploadphoto'},success(res){resolve(JSON.parse(res.data).url)},fail(err){console.log(err)wx.hideLoading()}})})})Promise.all(uploads).then(res=>{//图片上传完成presolve(res)wx.hideLoading()}).catch(err=>{preject(err)wx.hideLoading()wx.showToast({title:'上传失败请重试',icon:'none'})})})})
}

思路

1.函数接收一个临时图片路径数组,对传入的参数做一些判断

2.遍历图片路径数组,将每一个上传图片请求封装为promise,依次将这些 promise 对象存入一个数组

3.Promise.all 传入 promise对象 数组,当所有的图片都上传成功后,在 then 中接收到上传完成的网络图片数组

注意点

注意点1: wx.uploadFile 中 name 属性填写的是后端接收文件的字段的key(好吧,我自己都不知道我自己在说什么,还是上图吧。。。)

比如,这里后端上传文件的字段为file,在name的属性值填写的就是file 。

注意点2:wx.uploadFile 的 success 函数中输出的数据是字符串,需要JSON.parse转为对象才能使用

最后

Promise.all 接受的数组和输出的数组都是一致的,then方法接收到完成的结果,这样一来就解决了上传图片顺序和所有图片上传完成的问题。

求知若渴,虚心若愚!

每一次解决问题的过程都是对自我的提升!

微信小程序 - Promise 封装多张图片上传相关推荐

  1. [微信小程序] 单张、多张图片上传(图片转base64格式)实践经验

    本文首发自个人自有博客:[FaxMiao个人博客],一个关注Web前端开发技术.关注用户体验.记录前端点滴,坚持更多原创,为大家提供高质量技术博文! 定义初始数据: data: {imgList: [ ...

  2. 小程序promise封装post请求_微信小程序promise封装get/post请求

    微信小程序promise封装get/post请求 2020-07-04 20:42:49 微信小程序promise封装get/post请求 叶子兔 2018-10-10 08:55:30  1056  ...

  3. 微信小程序云开发如何实现上传视频 以及 图片

    微信小程序云开发如何实现上传视频 以及 图片 最基础的数据库增删改查,上传到云存储即可实现,附源码 wxml文件 <button bindtap="upload">上传 ...

  4. 小程序录音上传服务器,微信小程序录音实现功能并上传(使用node解析接收)

    微信小程序录音实现功能并上传(使用node解析接收) 发布时间:2020-09-04 11:59:06 来源:脚本之家 阅读:97 作者:weixin_43188227 背景 我在开发小程序的时候,有 ...

  5. taro开发微信小程序-添加开发者预览,上传测试版本(十四)

    taro开发微信小程序,上传测试版本,如果需要访问网络需要打开调试模式,如果配置了https协议的服务,提示对应的服务器证书无效,那么必须正确配置ssl证书,可以在阿里云或者腾讯云申请. 添加开发者预 ...

  6. 微信小程序环境下将文件上传到 OSS

    步骤 1: 配置 Bucket 跨域 客户端进行表单直传到 OSS 时,会从浏览器向 OSS 发送带有 Origin 的请求消息.OSS 对带有 Origin 头的请求消息会进行跨域规则(CORS)的 ...

  7. 微信小程序上传图片及文件(上传、下载、删除及预览)

    微信小程序上传附件 上传文件及图片 下载,预览.删除 自定义封装组件 哪儿用哪儿调用即可 wxml代码 <!-- <view>上传文件(我是子组件)</view> --& ...

  8. 微信小程序图片(单图多图上传显示)

    微信小程序上传图片组件自定义 最近在做微信小程序开发的时候,遇到了一个问题,就是图片上传于显示问题,微信自带的感觉用起来还是不方便,于是就萌生了自定义图片上传于显示组件 废话不多说直接上代码 首先创建 ...

  9. 小程序上传视频的php接口处理,微信小程序[第十二篇] -- 上传视频

    通过上一篇的学习,我们可以成功将宝宝的照片传到指定相册了,但是可爱的宝宝岂能只有照片,小视频必须同步跟上,莫问题!咱这篇就来一个视频上传的实现. 俺家小核桃镇贴. 服务端 其实对于yii2程序而言,如 ...

最新文章

  1. 在centos6.5上安装mongodb数据库
  2. Java程序员从笨鸟到菜鸟之(八十四)深入浅出Ajax
  3. CSS reset 标签初始化设置
  4. java ee 分页_【JavaEE】JavaEE分页实践
  5. XML文件读取工具类
  6. BZOJ3057 圣主的考验
  7. mysql自连接_MySQL自连接
  8. 点聚-weboffice 6.0 (一)
  9. maven详解_本地仓库+远程仓库_体现maven用途
  10. 手动解析App dSYM示例
  11. 土木工程模板计算机专业,土木工程毕业论文答辩自述模板
  12. 谷歌地图解析及ArcEngine加载谷歌地图方法
  13. 代码翻译尝试-使用Roaster解析和生成Java源码
  14. 如何开发Android安卓RFID读卡APP
  15. web网页设计期末课程大作业——基于HTML仿唯品会电商项目的设计与实现
  16. doodoo.js发布1.1.0 -- 中文最佳实践Node.js Web快速开发框架,支持Koa.js, Express.js中间件。包含多项功能改进,及Bug修复。...
  17. 一个简单的俄罗斯方块实现
  18. ABAP调用外部webservice 问题
  19. Linux发行版制作总结
  20. 快速入池淘宝猜你喜欢方法技巧

热门文章

  1. element 树形表格报Error: for nested data item, row-key is required
  2. UI自动化测试与接口自动化测试区别
  3. oracle之case函数(case when then else end)用法
  4. NS3网络仿真项目(二)——入门指南
  5. 篡改referer,踩了Chrome85修改referer策略的坑
  6. 互斥锁 (mutex)
  7. c++ opencv 加载 caffe 模型 ---- 笔记
  8. 图像处理:什么是掩膜
  9. Cache(高速缓冲存储器)
  10. 20.python-类属性和类方法