1、小程序上传图片功能实现需要注意以下几个点:

(1)图片最多上传9张(默认)
(2)上传后的图片会生成一个临时的地址,用过这个临时地址将图片上传到数据库
(3)图片保存的位置是在云开发控制台的 本地存储中
(4)图片只能是一张一张的上传
(5)保存在本地存储中的图片不能重名
(6)可以使用js中的new Date().getTime()返回一个毫秒值作为图片的名称,这个毫秒值是不会重复的
(7)图片的后缀可以用正则表达式取得let suffix = /\.[^\.]+$/.exec(filePath)[0]
(8)每次上传成功后,回调函数会返回一个fileID
(9)保存在数据库集合中的记录应该是这个 fileID
(10)你无法确定什么时候9张图片才能都上传成功,只有当所有图片都上传成功之后,你才能取到所有的fileID,所以每次执行上传图片操作时,都为其构建一个Promise对象,当所有的Promise都执行成功之后,这时候再插入字段到数据库中,需要用到Promise.all()方法

代码实现

这里的button使用的是vant组件,使用方法参考
https://blog.csdn.net/Cheny_Yang/article/details/88966365

1、点击上传图片按钮,触发uploadImgHandle点击事件,事件中调用小程序提供的wx.chooseImage()接口,实现上传图片的功能,返回值是一个图片的临时地址tempFilePaths,将临时地址存在一个数组中,以便待会正式上传时调用,代码实现如下

<van-button type="warning" bindtap='uploadImgHandle'>上传图片</van-button>
<view><block wx:for="{{tempImg}}" wx:key="{{index}}tmpimg"><image src='{{item}}' mode='aspectFill'></image></block>
</view>
<van-button type="primary" bindtap='submit'>提交</van-button>
  uploadImgHandle: function () {wx.chooseImage({count: 9,sizeType: ['original', 'compressed'],sourceType: ['album', 'camera'],success:res=> {// tempFilePath可以作为img标签的src属性显示图片const tempFilePaths = res.tempFilePathsthis.setData({tempImg: tempFilePaths})}})},

2、当点击提交按钮时,触发submit点击事件,在正式上传之前,先声明一个promiseArr数组,因为图片是多张,而上传图片只能是一张一张上传,所以for循环遍历tempImg数组,执行微信给我们的接口wx.cloud.uploadFile()实现图片上传,将每次上传图片的过程都保存在一个Promise对象中,然后将这几个Promise对象pushpromiseArr中,把每次上传图片返回的fileID concat()到自己定义的fileIDs数组中,以便等会存入数据集合中。
上传数据库的操作在Promise.all()中执行

 const db = wx.cloud.database()
Page({data: {tempImg: [],fileIDs: [],},submit: function () {wx.showLoading({title: '提交中',})const promiseArr = []//只能一张张上传 遍历临时的图片数组for (let i = 0; i < this.data.tempImg.length;i++) {let filePath = this.data.tempImg[i]let suffix = /\.[^\.]+$/.exec(filePath)[0]; // 正则表达式,获取文件扩展名//在每次上传的时候,就往promiseArr里存一个promise,只有当所有的都返回结果时,才可以继续往下执行promiseArr.push(new Promise((reslove,reject)=>{wx.cloud.uploadFile({cloudPath: new Date().getTime() + suffix,filePath: filePath, // 文件路径}).then(res => {// get resource IDconsole.log(res.fileID)this.setData({fileIDs: this.data.fileIDs.concat(res.fileID)})reslove()}).catch(error => {console.log(error)})}))}Promise.all(promiseArr).then(res=>{db.collection('comments').add({data: {fileIDs: this.data.fileIDs //只有当所有的图片都上传完毕后,这个值才能被设置,但是上传文件是一个异步的操作,你不知道他们什么时候把fileid返回,所以就得用promise.all}}).then(res => {console.log(res)wx.hideLoading()wx.showToast({title: '提交成功',})}).catch(error => {console.log(error)})})},

效果如下


bingo~

小程序云开发实现上传图片功能相关推荐

  1. 怎么实现微信小程序云开发拼团功能?

    [微信云开发教程]怎么实现微信小程序云开发拼团功能? 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 [微 ...

  2. 微信小程序云开发实现退款功能

    微信小程序云开发实现退款功能 官方文档 小程序云开发实现微信支付 官方文档非常的简单,也没有示例代码,只是列出了许多需要的参数,对于新手来说会可能有点迷糊.可以我的步骤跟着一步一步来. 一.获取退款A ...

  3. (一)微信小程序云开发之上传图片(全流程讲解)

    前言 第一次写CSDN,有什么写的不清楚的地方大家指点. 我本是做前端的,干了6年左右,前一阵接了个私活,做微信小程序.技术上小程序用的原生+vant,后台管理系统用的Vue+Element,本来是前 ...

  4. 小程序开发探秘:『 小程序·云开发 』新功能“云调用”上手体验

    近期微信『 小程序·云开发 』悄悄的上线了一个叫做"云调用"的新功能. 从文档上看,云调用是基于云函数使用小程序开放接口的能力,在云函数中使用云调用来调用服务端接口,无需换取acc ...

  5. 微信小程序云开发获取上传图片后https的url链接地址

    话不多说,直接上代码: // 点击上传图片 触发函数 changeBigImg(){let that = this;wx.chooseImage({count: 1,sizeType: ['origi ...

  6. 小程序云开发接入赞赏功能

    本次演示的是如何在自己的小程序中接入 给赞 小程序的赞赏功能. 1. 微信搜索 给赞小程序,进入小程序后先进行 "赞赏设置",主要包括设置赞赏金额,还可以在  "我的&q ...

  7. 小程序云开发实现搜索功能

    云开发数据库的模糊搜索,根据记录的字段字符串模糊搜索实现. 代码: 先在app.js初始化: //app.js App({onLaunch: function () {wx.cloud.init({e ...

  8. 微信小程序云开发学习

    1.参考视频教程:微信小程序云开发基础到实战 云数据库 云函数 云存储 云调用[新视觉]_哔哩哔哩_bilibili 2.参考笔记: 本来想自己做一份笔记的,后来发现已经有人做了份非常不错的笔记了,再 ...

  9. 【第三篇】微信小程序云开发项目总结

    上篇文章:[第二篇]微信小程序云开发项目总结 功能点2:答疑解惑 这个功能点的实现基本与用户填写简历相同,都是用户上传数据到数据库,不加说明. 功能点3:消息回复 这个板块是用户查看管理员的回复消息的 ...

  10. 仿qq邮箱源码程序_巧用小程序·云开发实现邮件发送功能丨实战

    先看效果图: 通过上面的日志,可以看出我们是158开头的邮箱给250开头的邮箱发送邮件,下面是成功接收到的邮件. 准备工作 1.qq邮箱一个 2.开通你的qq邮箱的授权码(会具体讲解) 3.注册自己的 ...

最新文章

  1. POJ 1944 - Fiber Communications
  2. Python编码规范:IF中的多行条件
  3. php 自动列,设置自动调整列phpExcel
  4. 【C++grammar】代理构造、不可变对象、静态成员
  5. php处理base64数据,php基于base64解码数据与图片的转换
  6. M283-bsp包问题
  7. 徐州工程学院计算机报名,2019年3月江苏徐州工程学院计算机等级考试报名时间...
  8. 简单的二维数组问题,不用不知道,一用吓一跳
  9. Python读取csv数据文件,并按照指定比例划分为机器学习使用的训练集和测试集
  10. html字体加粗代码_9102年了,公众号还不会换字体?
  11. 菜鸟教程网oracle,Oracle数据库入门教程 Oracle数据库菜鸟教程
  12. 几款流行的开源后台管理框架
  13. ENSP实验五——三层交换机+二层交换机
  14. 小区广播背景音乐系统IP网络广播解决方案
  15. 使用PostMan调试webService接口
  16. bash ps1变量_Linux:设置用户变量ps1
  17. 计算机进制之间的转换(2进制、10进制、8进制、16进制)
  18. 为你解说加密Pdf如何导出图片
  19. 解读PMP考点:PMP考试中关于合同计算类型的题目
  20. 安科瑞ACX电瓶车智能充电桩,充满自停,多样支付,10路端口,安全保护

热门文章

  1. 【CSS】浅谈 CSS 中常用的相对长度单位 em, rem
  2. c语言反序存放,c语言:将数组中n个整数按相反顺序存放。
  3. 记解决一次drawable资源找不到的问题
  4. excel批量删除单元格中的部分内容
  5. 中国四大运营商2G/3G/4G/5G工作频率以及网络制式
  6. excel如何冻结表格行或者列
  7. 【正一专栏】阿根廷和葡萄牙都进不了世界杯可能吗?
  8. 简化版WIN7安装打印机时提示“打印机无法安装,打印处理器不存在。”正确处理方法
  9. 微信表情包的制作以及50*50像素图片太模糊的处理方法
  10. 计算机快捷截图方式,Windows系统电脑快速屏幕截图方式