前言:

不太懂为啥Vant Weapp的官方文档明明可以写全代码,却只放了一部分出来,关于云开发的案例也是写得蛮晦涩难懂的,参考了以下的文档:
云开发能力基础讲解
小程序官方文档wx.cloud.uploadFile
vant Weapp官方文档Uploader 文件上传

参考了这位博主的文章
微信小程序云开发图片上传实现预览(配合vant Weapp使用)

实现效果预览:

上传成功前显示图片正在加载,上传成功才显示图片

WXML代码:

<view class="image-uploader"><!-- 文件上传 --><van-uploader file-list="{{ fileList }}"deletable="{{ true }}" use-before-readbind:before-read="beforeRead"bind:after-read="afterRead" bind:delete="deleteImg"/>
</view>

before-read:文件读取前,在回调函数中返回 false 可终止文件读取,绑定事件的同时需要将use-before-read属性设置为true
after-read:文件读取完成后(不用使用wx.chooseImage,event.detail.file就是当前读取的文件

JS代码:

Page({data: {fileList: [],},//before-read 事件可以在上传前进行校验,调用 callback 方法传入 true 表示校验通过,传入 false 表示校验失败。beforeRead(event) {const { file, callback } = event.detail;callback( file.type === 'image' );},afterRead( event) {const file = event.detail.file //还没上传时将选择的图片的上传状态设置为加载    var that = thisconst fileList = that.data.fileList fileList.push({})fileList[ fileList.length-1 ].status='uploading'that.setData({ fileList })this.uploadImg( file.url )},// 上传图片到云开发的存储中uploadImg( fileURL) {var that = this//上传文件const filePath = fileURL // 小程序临时文件路径const cloudPath = `${Date.now()}-${Math.floor(Math.random(0, 1) * 1000)}` + filePath.match(/\.[^.]+?$/)[0]// 给文件名加上时间戳和一个随机数,时间戳是以毫秒计算,而随机数是以 1000 内的正整数,除非 1 秒钟(1 秒=1000 毫秒)上传几十万张照片,不然文件名是不会重复的。// 将图片上传至云存储空间wx.cloud.uploadFile({cloudPath, // 指定上传到的云路径filePath // 指定要上传的文件的小程序临时文件路径}).then(res => {// 上传一张图片就会打印上传成功之后的 res 对象,里面包含图片在云存储里的 fileID,注意它的文件名和文件后缀console.log("res.fileID", res.fileID)// 上传完成需要更新 fileListconst fileList = that.data.fileList fileList[ fileList.length-1 ].url = res.fileIDfileList[ fileList.length-1 ].status='done' //将上传状态修改为已完成that.setData({ fileList })console.log("fileList", fileList)wx.showToast({ title: '上传成功', icon: 'none' })}).catch((e) => {wx.showToast({ title: '上传失败', icon: 'none' })const fileList = that.data.fileList fileList[ fileList.length-1 ].status='failed' //将上传状态修改为已完成that.setData({ fileList })console.log(e)});},// 点击预览的x号,将图片删除deleteImg( event) {// event.detail.index: 删除图片的序号值const delIndex = event.detail.indexconst fileList = that.data.fileList // 云存储删除(真删除)var fileID = fileList[ delIndex].urlthis.deleteCloudImg( fileID)// 页面删除(假删除)// 添加或删除 array.splice(index,howmany,item1,.....,itemX)fileList.splice( delIndex, 1)this.setData({ fileList })},// 删除云存储的图片deleteCloudImg( fileID) {wx.cloud.deleteFile({fileList: [ fileID],}).then(res => {// handle successconsole.log(res.fileList)}).catch((e) => {wx.showToast({ title: '删除失败', icon: 'none' })console.log(e)})}
})

通过在数组 fileList 末尾进行添加图片信息, fileList[ fileList.length-1 ] 可以指定数组末尾,删除可以通过 删除图片的序号值 删除数组的信息fileList.splice( delIndex, 1)

小程序结合Vant Weapp实现多张图片的上传和预览相关推荐

  1. vant weapp 多选上传图片_微信小程序结合vant weapp ui实现多图上传组件

    微信小程序多图上传 最近在写小程序的商品上传,为方便需要使用多张图片的上传的功能.因为小程序不支持数组的多张图片同时上传,然后根据自己的需求创建了一个组件希望能够帮到大家 效果图 创建一个图片上传的p ...

  2. 微信小程序导入Vant Weapp组件库

    超详细!微信小程序导入Vant Weapp组件库 Vant Wepp组件库轻量.可靠,同时组件样式丰富美观,容易上手,我们可以引入该组件库来实现小程序的相关界面样式. Vant Weapp组件库官方文 ...

  3. 微信小程序中Vant Weapp的引用与使用

    微信小程序中Vant Weapp的引用与使用 1.安装方式 # 通过 npm 安装 npm i @vant/weapp -S --production# 通过 yarn 安装 yarn add @va ...

  4. 微信小程序使用vant weapp报错

    微信小程序使用vant weapp报错 错误一:构建错误 错误二:["usingComponents"]["van-button"] 未找到 我的安装流程 1. ...

  5. 微信小程序升级Vant Weapp版本

    微信小程序升级Vant Weapp版本 大家好,今天我们来学习一下微信小程序如何升级Vant Weapp版本,好好看,好好学,超详细的 第一步 首先你要有一个构建npm的项目 还不知道构建npm的小伙 ...

  6. 小程序安装Vant Weapp详细步骤,下载和npm安装版

    小程序安装Vant Weapp详细步骤 使用npm下载 1.新建项目并初始化项目 2.下载Vant Weapp 3.修改 app.json 4.构建 npm 包 5.引入组件 下载方式 1. npm下 ...

  7. 微信小程序基于vant和springboot实现附件上传和预览

    前言 图片上传和预览在移动端应用非常广泛和频繁,vant组件库van-uploader组件已经帮我们实现了大部分功能,但是在系统中频繁使用还是有点麻烦,我们根据自身的业务系统重新封装了一下简化我们的开 ...

  8. 一款社区论坛小程序源码(修复登录图片发布上传问题)

    简介: 这是一款社区论坛小程序源码(修复登录图片发布上传问题) 内涵强大的功能 支持多种多样的发帖模式 比如发图文,发语音,发涂鸦,发视频等 另外也可以设置为只能会员才可以发 另外还拥有礼物功能,可以 ...

  9. 微信小程序 删除服务器图片,微信小程序实现图片上传放大预览删除代码

    本文实例为大家分享了微信小程序图片上传放大预览的具体代码,供大家参考,具体内容如下 image.js代码: = 9) { this.setData({ lenMore: 1 }); setTimeou ...

最新文章

  1. python 中*args 和 **kwargs的区别
  2. UISearchbar placeholder 文本和icon居左 iOS7
  3. 常见分布式理论(CAP、BASE)和一致性协议(Gosssip协议、Raft一致性算法)
  4. python学习-综合练习七(二分查找(递归)、线性查找、插入排序、快速排序、选择排序、冒泡排序、归并排序、堆排序)-实例
  5. 【51单片机快速入门指南】4.3.2: MPU6050:一阶互补滤波、二阶互补滤波和卡尔曼滤波获取欧拉角
  6. 关于jsp,javascript,php等语言
  7. highCharts使用中问题总结
  8. 动态通过网络获取json来tabbar图片和文字或其他信息
  9. 秒后面的单位是什么_单位与国际单位制是如何由来的?
  10. python 选择文件对话框插件_[ PyQt入门教程 ] PyQt5基本控件使用:消息弹出、用户输入、文件/目录选择对话框...
  11. 一道实用linux运维问题的9种shell解答方法!
  12. 基于python的表情识别_python 优秀项目分享-表情识别
  13. windows常见电脑蓝屏的解决办法
  14. 自制ADK To Win11PE,加入原生explorer,初步修改注册表(图文1.1万字,很细) (2)
  15. 【图像增强】Learning Enriched Features for Real Image Restoration and Enhancement 阅读笔记
  16. 【Python】zip 函数
  17. sql server2008一直提示starting up database
  18. ETCD教程(一) 通过docker安装etcd集群
  19. 潜渊症LINUX环境部署全流程
  20. 一文详解 Band Protocol :预言机博弈中的价值输出

热门文章

  1. 【北交所周报】近九成个股下跌,凯大催化上市当天涨39%;北交所发行节奏放缓,上周仅瑞星股份一家企业过会;...
  2. Exchanger 案例
  3. 各种版本的称呼--例如Lite指精减版
  4. freetype字体
  5. Kafka学习之一 Kafka是什么,主要应用在什么场景?
  6. postgreSQL中的array_to_string函数和如何实现group_concat
  7. Unity之动画系统的学习(一):场景动画
  8. unity 动画结束 后处理事件
  9. 如何使用PhantomJS测试JavaScript
  10. vue 路由跳转 页面数据不更新问题