小程序uView2.X框架upload组件上传方法总结+避坑
呈现效果:
1.1单图片上传

1.2多图片上传

前言:相信很多人写小程序会用到uView框架,总体感觉还算OK吧,只能这么说,肯定也会遇到图片视频上传,如果用到这个upload组件相信你,肯定遇到各种各样的问题,这是我个人总结的单图片和多图片上传方法.
uView2.X框架:uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架
单图片上传:
页面结构:
<u-form-item prop="image1" ref="item"><view class="img"><u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1" multiple :maxCount="1"uploadIcon="plus" uploadIconColor="#0086ff" ref="upload" width="110" height="110"></u-upload><image v-if="!fileList1[0].url" src="../../../static/images/photo.png" mode=""></image></view><view class="text">(*请提供真实头像)</view></u-form-item>
1.首先定义的list 大家不要随便改,就按照官方的
fileList1: [],name="1" 标识符,
2.分别有上传 删除 几个方法
2.1删除方法
// 图像删除方法deletePic(event) {this[`fileList${event.name}`].splice(event.index, 1)},
2.2上传之前做的事情,比如 限制格式 限制大小 这点比较麻烦 ,里面注释写的比较详细
// 新增图片 这个是上传图像的方法async afterRead(event) {// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式let lists = [].concat(event.file)// 用于存储符合条件的图片let Images = [];// 遍历上传的每张图片for (let i = 0; i < lists.length; i++) {const item = lists[i];// 验证图片格式const isImage = /\.(png|jpe?g)$/i.test(item.url);if (!isImage) {uni.showToast({title: '只能上传png,jpg,jpeg格式的图片',icon: 'none',duration: 3000});// 删除不符合条件的图片lists.splice(i, 1);// 跳过当前图片,进行下一张图片的验证continue;}// 验证图片大小const maxSize = 2 * 1024 * 1024; // 2MB大小限制if (item.size > maxSize) {uni.showToast({title: '图片大小不能超过2MB',icon: 'none',duration: 3000});// 删除不符合条件的图片lists.splice(i, 1);// 跳过当前图片,进行下一张图片的验证continue;}Images.push(item)}let fileListLen = this[`fileList${event.name}`].lengthImages.map((item) => {this[`fileList${event.name}`].push({...item,status: 'uploading',message: '上传中'})})for (let i = 0; i < Images.length; i++) {const result = await this.uploadFilePromise(Images[i].url)// 返回给后端服务器的 结果需要赋值给 this.infoForm.image = resultconsole.log(result, '上传图像result');// this.infoForm.avatar = resultlet item = this[`fileList${event.name}`][fileListLen]this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {status: result.status,message: result.status == 'failed' ? '上传失败' : '',url: result.url}))fileListLen++}},
2.2.1 上传之前做了 格式和大小限制 如果不符合 直接删除

2.3 上传成功的回调 主要是是上传的是一个json格式 一定要进行处理 JSON.parse(res.data).path,
而且这里做了状态判断 会有成功和失败判断 主要是上传失败可以叉掉


和这里进行状态对应处理

比较恶心的时候 不处理一直显示上传中 差不掉

// 回调函数方法uploadFilePromise(url) {return new Promise((resolve, reject) => {let a = uni.uploadFile({url: baseUrl + '/admin/upload/targetFile', //后端接口地址filePath: url,name: 'file', //传给后端参数header: {'token': uni.getStorageSync('whjk_token')},formData: {path: 'avatar/user'},success: (res) => {console.log(res, 'uploadFilePromise');// resolve(JSON.parse(res.data).path)if (res.statusCode == 200) { resolve({url: JSON.parse(res.data).path,status: 'success'})} else {resolve({url: url,status: 'failed'})}}});})},
2.3传参说明 参数要 搞正确
uni.uploadFile({url: baseUrl + '/admin/upload/targetFile', // 后端接口地址filePath: url,name: 'file', //传给后端参数header: {'token': uni.getStorageSync('whjk_token')},formData: {path: 'avatar/user' // 后端给的路径 看情况而定},
多图片上传或者视频上传:
fileList2: [], // 不要随意定义
name = "2"
其实上传方法都一样的 就是属性需要改一下就行 判断都是一样的方法
1.需要修改这个属性
accept="image/*,video/*,.pdf"

2.页面结构
<u-form-item prop="annexPhoto" ref="item1"><view class="common"><text class="tex">展示附件</text><text class="ext">(最多6个,仅支持png,jpg,jpeg格式上传)</text></view><view class="upload"><u-upload :fileList="fileList2" @afterRead="imageOrVideoOrPdf" @delete="deletePicPdf" name="2" multipleaccept="image/*,video/*,.pdf":maxCount="6" uploadIcon="plus" uploadIconColor="#0086ff" :deletable="true"></u-upload></view></u-form-item>
3.上传前限制 大小 图片 格式 里面注释写的很详细
// 视频image和pdf方法async imageOrVideoOrPdf(event) {console.log(event);// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式let lists = [].concat(event.file);// 用于存储符合条件的图片let validImages = [];// 遍历上传的每张图片for (let i = 0; i < lists.length; i++) {const item = lists[i];// 验证图片格式const isImage = /\.(png|jpe?g)$/i.test(item.url);if (!isImage) {uni.showToast({title: '只能上传png,jpg,jpeg格式的图片!',icon: 'none',duration: 5000});// 删除不符合条件的图片lists.splice(i, 1);// 跳过当前图片,进行下一张图片的验证continue;}// 验证图片大小const maxSize = 2 * 1024 * 1024; // 2MB大小限制if (item.size > maxSize) {uni.showToast({title: '图片大小不能超过2MB!',icon: 'none',duration: 5000});// 删除不符合条件的图片lists.splice(i, 1);// 跳过当前图片,进行下一张图片的验证continue;}// 符合条件的图片添加到validImages数组中validImages.push(item);}let fileListLen = this[`fileList${event.name}`].length;validImages.map((item) => {this[`fileList${event.name}`].push({...item,status: 'uploading',message: '上传中'})})for (let i = 0; i < validImages.length; i++) {const result = await this.uploadFileOrPdf(validImages[i].url);console.log(result);// 返回给后端服务器的结果需要赋值给 this.infoForm.annex = resultlet item = this[`fileList${event.name}`][fileListLen];// console.log(fileListLen);this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {status: result.status,message: result.status == 'failed' ? '上传失败' : '',url: result}));console.log(result, 'result');if (result.status == 'success') {this.imgarr.push(result);console.log(this.imgarr,'imgarr');}fileListLen++;}// 将上传成功的url数组一起提交给后端// this.infoForm.annex = urls},
4.上传成功回调 注释的地方有写 可以上传 pdf 视频 图片 改一下path路径就行
// 视频image和pdf方法回调函数uploadFileOrPdf(url) {// let uploadedFilePaths = [];return new Promise((resolve, reject) => {// let path;// const fileExtension = url.split('.').pop().toLowerCase();// if (['jpg', 'jpeg', 'png', 'gif'].includes(fileExtension)) {// path = 'annex/image'; // 图片路径// } else if (fileExtension === 'pdf') {// path = 'annex/pdf'; // PDF路径// } else {// reject('Invalid file type');// return;// }uni.uploadFile({url: baseUrl + '/admin/upload/targetFile', //后端接口地址filePath: url,name: 'file', //传给后端参数header: {'token': uni.getStorageSync('whjk_token')},formData: {path: 'annex/image' // 根据文件后缀类型设置路径},success: (res) => {console.log(res);// resolve(JSON.parse(res.data).path)if (res.statusCode == 200) {resolve({url: JSON.parse(res.data).path,status: 'success'})} else {resolve({url: url,status: 'failed'})}},fail: (err) => {// console.log(err,'err');reject(err);}});})},
5.删除方法
// 图像删除方法deletePic(event) {this[`fileList${event.name}`].splice(event.index, 1)},
6.最终呈现的效果就是这样

相关文章:
小程序uView2.X框架upload组件上传方法总结+避坑
呈现效果: 1.1单图片上传 1.2多图片上传 前言:相信很多人写小程序会用到uView框架,总体感觉还算OK吧,只能这么说,肯定也会遇到图片视频上传,如果用到这个upload组件相信你,肯定遇到各种各样的问题,这是我个人总结的单图片和多图片上传方法. uView2.X框架:uView 2.0 - 全面兼容…...
人脸检测及追踪回顾
轻量级人脸检测 代码地址 人脸追踪 代码地址 MNN框架部署文档 文档地址...
虚拟环境和包
目录 12. 虚拟环境和包 12.1. 简介 12.2. 创建虚拟环境 12.3. 使用 pip 管理包 12. 虚拟环境和包 12.1. 简介 Python 应用程序经常会使用一些不属于标准库的包和模块。应用程序有时候需要某个特定版本的库,因为它需要一个特定的 bug 已得到修复的库或者它是使用…...
springboot配置文件读取
项目配置文件 怎么说呢,给了个项目,他启动了,然后我看不懂为啥能够启动项目这样 很迷茫,为啥能够成功启动呢项目,为啥项目有properties也要有yml呢? 问题处理 首先,properties的配置的优先级…...
纵享丝滑!Cesium + ffmpegserver 生成高质量动态视频【逐帧生成】
工作中需要提供一些在三维场景下的视频动画素材,屏幕录制会出现掉帧等其他问题,看到 ffmpegserver 后,眼前一亮 Cesium ffmpegserver 生成高质量视频 1.自建 ffmpegserver 首先,克隆 ffmpegserver 仓库代码 git clone https://…...
Linux下C++编程-进度条
引言:本篇主要在linux下的C实现进度条的功能。按照多文件编程,同时使用Makefile文件完成多文件的编译、连接。 首先创建头文件: 1. progress.h #pragma once #include <iostream> #include <cstring> #include <iomanip>…...
C语言常见题目(1)交换两个变量的值,数的逆序输出,猜数游戏,两个数比较大小等
我的个人主页:☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主 欢迎各位 👍点赞 ⭐收藏 📝评论 特别标注:本博主将会长期更新c语言的语法知识,初学c语言的朋友们,可以收藏…...
Springboot使用sqlcipher4加密sqlite数据库
在有些业务场景,需要使用sqlite数据库,但sqlite数据库生的db文件,是明文的,该文件被别人拿到,就可以看到里面的所有数据,非常不安全,市面上有很多对sqlite数据库文件加密的方式,但都…...
指针拔尖(2)(巩固提高,全网最牛,包会,看不懂带电脑来找我)
文章目录 前言变量的声明 一、函数指针二、函数指针数组三、指向函数指针数组的指针四、 回调函数总结 前言 提示:本章是指针拔尖系列的终章,有四大知识点。 一、函数指针 二、函数指针数组 三、指向函数指针数组的指针 四、回调函数 但学习这些知识点我…...
本地部署多语言代码生成模型CodeGeeX2
🏠 Homepage|💻 GitHub|🛠 Tools VS Code, Jetbrains|🤗 HF Repo|📄 Paper 👋 Join our Discord, Slack, Telegram, WeChat BF16/FP16版本|BF16…...
C语言刷题练习(Day2)
✅作者简介:大家好我是:侠客er,是一名普通电子信息工程专业的大学学生,希望一起努力,一起进步! 📃个人主页:侠客er 🔥系列专栏:C语言刷题练习 🏷️…...
docker- harbor私有仓库部署与管理
什么是 harbor harbor是一个开源的云原生镜像仓库,它允许用户存储、签名、和分发docker镜像。可以将 harbor 看作是私有的docker hub ,它提供了更新安全性和控制性,让组织能够安全的存储和管理镜像 harbor RBAC(基于角色访问控制…...
自动化测试的优缺点
自动化测试的优势 能够极大地提升测试的效率,测试人员可以迅速地在指定平台部署测试脚本且对相应功能进行测试。 “弱化”了软件测试人员个体差异对测试结果的影响。 提高整个测试团队的技能水平。 自动化测试的缺陷 自动化测试的缺陷在于:总是按照…...
深度学习基础知识 Dataset 与 DataLoade的用法解析
深度学习基础知识 Dataset 与 DataLoade的用法解析 1、Dataset2、DataLoader参数设置:1、pin_memory2、num_workers3、collate_fn分类任务目标检测任务 1、Dataset 代码: import torch from torch.utils import dataclass MyDataset(torch.utils.data.D…...
【ElasticSearch】深入探索 DSL 查询语法,实现对文档不同程度的检索,以及对搜索结果的排序、分页和高亮操作
文章目录 前言一、Elasticsearch DSL Query 的分类二、全文检索查询2.1 match 查询2.2 multi_match 查询 三、精确查询3.1 term 查询3.2 range 查询 四、地理坐标查询4.1 geo_bounding_box 查询4.2 geo_distance 查询 五、复合查询5.1 function score 查询5.2 boolean 查询 六、…...
使用wireshark解密ipsec ISAKMP包
Ipsec首先要通过ikev2协议来协商自己后续协商所用的加解密key以及用户数据的esp包用的加解密包。 ISAKMP就是加密过的ike-v2的加密包,有时候我们需要解密这个包来查看协商数据。如何来解密这样的包? 首先导出strongswan协商生成的各种key. 要能导出这些key&#…...
算法进阶-搜索
算法进阶-搜索 题目描述:给定一张N个点M条边的有向无环图,分别统计从每个点除法能够到达的点的数量 **数据规模:**1 < n < 3e4 **分析:**这里我们可以使用拓扑排序根据入边对所有点进行排序,排序后我们按照逆序&…...
时空智友企业流程化管控系统 sessionid泄露漏洞 复现
文章目录 时空智友企业流程化管控系统 sessionid泄露漏洞 复现0x01 前言0x02 漏洞描述0x03 影响平台0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 时空智友企业流程化管控系统 sessionid泄露漏洞 复现 0x01 前言 免责声明:请勿利用文章内的相关技术从…...
QT编程,QMainWindow、事件
目录 1、QMainWindow 2、事件 1、QMainWindow QMenuBar:菜单栏 QMenu: 菜单 QAction: 动作 QToolBar: 工具栏 QStatusBar: 状态栏 setWindowTitle("主窗口"); //: 前缀 文件名 setWindowIcon(QIcon(":/mw_images/10.png")); resize(640, 4…...
人工智能在教育上的应用2-基于大模型的未来数学教育的情况与实际应用
大家好,我是微学AI ,今天给大家介绍一下人工智能在教育上的应用2-基于大模型的未来数学教育的情况与实际应用,随着人工智能(AI)和深度学习技术的发展,大模型已经开始渗透到各个领域,包括数学教育。本文将详细介绍基于大模型在数学…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
