uniapp实现图片上传——支持APP、微信小程序

news2024/11/26 9:42:29

uniapp实现图片、视频上传

文章目录

    • uniapp实现图片、视频上传
      • 效果图
      • 组件
        • template
        • js
      • 使用

相关文档:

  • 结合 uView 插件 + uni.uploadFile 实现
    u-upload
    uploadfile

效果图

在这里插入图片描述


组件

  • 简单封装,还有很多属性…,自定义样式等…根据个人所需调整
template
<template>
	<view>
		<u-upload
			:fileList="fileList"
			@afterRead="afterRead"
			@delete="deletePic"
			name="files"
			:maxCount="maxCount"
			:multiple="multiple"
			:width="width"
			:height="height"
			:previewFullImage="previewFullImage"
			:accept="accept"
		>
		</u-upload>
	</view>
</template>

js
  • toast 方法,修改为自己即可;
<script>
	export default {
		name:"uploadFile",
		props: {
			width: {
				type: Number,
				default: 60
			},
			height: {
				type: Number,
				default: 60
			},
			maxCount: { // 限制上传数量
				type: Number,
				default: 1
			},
			multiple: { // 是否开启图片多选
				type: Boolean,
				default: false
			},
			list: { // 图片列表
				type: Array,
				default: []
			},
			previewFullImage: { // 文件预览
				type: Boolean,
				default: true
			},
			accept: { // 上传类型 all | media | image | file | video
				type: String,
				default: image
			}
		},
		data() {
			return {
				fileList: []
			};
		},
		mounted() {
			this.fileList = this.list;
		},
		methods: {
			/**
			 * 删除图片
			 * @param {Object} event
			 */
			deletePic(event) {
				this.fileList.splice(event.index, 1)
			},
			/**
			 * 读取后的处理函数
			 * @param {Object} event
			 */
			async afterRead(event) {
				let lists = [].concat(event.file)
				let fileListLen =this.fileList.length
				lists.map((item) => {
					this.fileList.push({
						...item,
						status: 'uploading',
						message: '上传中...'
					})
				})
				for (let i = 0; i < lists.length; i++) {
					const result = await this.uploadFilePromise(lists[i].url)
					this.$util.showToast('上传成功');
					
					let item = this.fileList[fileListLen]
					this.fileList.splice(fileListLen, 1, Object.assign(item, {
						status: 'success',
						message: '',
						url: result.imgUrl
					}))
					fileListLen++
				}
			},
			/**
			 * 上传图片
			 * @param {Object} url
			 */
			uploadFilePromise(url) {
				return new Promise((resolve, reject) => {
					uni.uploadFile({
						url: `服务器 url xxxx`,
						filePath: url,
						name: 'file', // 文件对应的 key
						header: {
							// 根据个人所需,是否要登录
							// Authorization: `Bearer ${ getToken() }`
						},
						success: (res) => {
							// 接口返回数据,自行修改
							let datas = JSON.parse(res.data);
							if (datas.code != 200) {
								this.$util.showToast(datas.msg);
								reject(res);
								return;
							}
							setTimeout(() => {
								resolve(datas.data)
							}, 1000)
						},
						fail: (res) => {
							reject(res);
						}
					});
				})
			}
		}
	}
</script>

<style>

</style>

使用

<view>
	<uploadFile :list="imgList"></uploadFile>
</view>

import uploadFile from '@/components/uploadFile/uploadFile.vue'

export default {
		components: {
			uploadFile
		},
		data() {
			return {
				imgList: [{ url: 'https://cdn.uviewui.com/uview/swiper/1.jpg' }] // test 根据业务处理
			}
		}
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1717758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

element中table的selection-change监听改变的那条数据的下标

<el-table ref"table" :loading"loading" :data"tableData" selection-change"handleSelectionChange"></el-table>当绑定方法selection-change&#xff0c;当选择项发生变化时会触发该事件 // 多选框选中数据handleSele…

App自动化测试_Python+Appium使用手册

一、Appium的介绍 Appium是一款开源的自动化测试工具&#xff0c;支持模拟器和真机上的原生应用、混合应用、Web应用&#xff1b;基于Selenium二次开发&#xff0c;Appium支持Selenium WebDriver支持的所有语言&#xff08;java、 Object-C 、 JavaScript 、p hp、 Python等&am…

链动3+1模式:数字化转型中的创新商业发展路径

在数字化时代&#xff0c;企业为了保持竞争力&#xff0c;不断探索和尝试新的商业模式。链动31模式作为一种创新的商业模式&#xff0c;以其独特的运作机制&#xff0c;为企业和个人带来了全新的发展机遇。本文将对链动31模式进行深入解析&#xff0c;并通过与传统链动模式的对…

Github 如何配置 PNPM 的 CI 环境

最近出于兴趣在写一个前端框架 echox&#xff0c;然后在 Github 上给它配置了最简单的 CI 环境&#xff0c;这里简单记录一下。 特殊目录 首先需要在项目根目录里面创建 Github 仓库中的一个特殊目录&#xff1a;.github/workflows&#xff0c;用于存放 Github Actions 的工作…

vm-bhyve:bhyve虚拟机的管理系统@FreeBSD

先说情况&#xff0c;当前创建虚拟机后网络没有调通....不明白是最近自己点背&#xff0c;还是确实有难度... 缘起&#xff1a; 前段时间学习bhyve虚拟机&#xff0c;发现bvm这个虚拟机管理系统&#xff0c;但是实践下来发现网络方面好像有问题&#xff0c;至少我花了两天时间…

自动化捡洞/打点必备神器

工具介绍 毒液流量转发器Venom-Transponder&#xff1a;自动化捡洞/打点/跳板必备神器&#xff0c;支持联动URL爬虫、各种被动扫描器&#xff1b;该工具支持在mac/windows/linux等系统上使用。 该流量转发器诞生背景&#xff1a; 鉴于平时挖洞打点时用到被动扫描器&#xff0…

物联网——TIM定时器、PWM驱动呼吸灯、舵机和直流电机

定时器概念&#xff08;常用于输出PWM波形&#xff0c;驱动电机&#xff09; 时间脉冲数时钟周期&#xff1b; 这里的脉冲数6553665536&#xff0c;支持定时器级联&#xff0c;从而延长定时 定时器类型 基本定时器原理图&#xff08;UI:更新中断&#xff0c; U:更新事件&#…

C语言 | Leetcode C语言题解之第119题杨辉三角II

题目&#xff1a; 题解&#xff1a; int* getRow(int rowIndex, int* returnSize) {*returnSize rowIndex 1;int* row malloc(sizeof(int) * (*returnSize));row[0] 1;for (int i 1; i < rowIndex; i) {row[i] 1LL * row[i - 1] * (rowIndex - i 1) / i;}return row…

如何查看本地sql server数据库的ip地址

程序连线SQL数据库&#xff0c;需要SQL Server实例的名称或网络地址。 1.查询语句 DECLARE ipAddress VARCHAR(100) SELECT ipAddress local_net_address FROM sys.dm_exec_connections WHERE SESSION_ID SPID SELECT ipAddress As [IP Address]SELECT CONNECTIONPROPERTY(…

windows中安装zookeeper

https://zhuanlan.zhihu.com/p/692451839 Index of /apache/zookeeper/zookeeper-3.9.2 Zookeeper的应用场景 1、配置管理 2、服务注册中心 3、主从协调 4、分布式锁。&#xff08;客户端在一个节点下创建有序节点&#xff0c;如果分配的节点号最小&#xff0c;则获取锁&am…

MySQL事务与并发控制案例

1. MySQL在事务与并发控制情况下加锁案例实现 第一步&#xff1a;开启一个事务并发锁 第二步&#xff1a;对加X锁&#xff08;排他锁&#xff09;的数据进行操作 可以看到锁被阻塞了&#xff1b; 2. 锁超时或死锁怎么办&#xff1f; Deadlock found when trying to get lock…

Redis之持久化、集群

1. Redis持久化 Redis为什么需要持久化?因为Redis的数据我们都知道是存放在内存中的&#xff0c;那么每次关闭或者机器断电&#xff0c;我们的数据旧丢失了。 因此&#xff0c;Redis如果想要被别人使用&#xff0c;这个问题就需要解决&#xff0c;怎么解决呢?就是说我们的数…

关于OpenFlow协议的运行机制和实践分析(SDN)

目录 OpenFlow运行机制 1 OpenFlow信道建立 1.1 OpenFlow消息类型 1.2 信道建立过程解析 2 OpenFlow消息处理 2.1 OpenFlow流表下发与初始流表 2.2 OpenFlow报文上送控制器 2.3 控制器回应OpenFlow报文 3 OpenFlow交换机转发 3.1 单播报文转发流程 OpenFlow的实践分析…

C++的第一道门坎:类与对象(三)

目录 一.再谈构造函数 1.1构造函数体赋值 1.2初始化列表 1.3explicit关键字 二.static成员 2.1概念 ​编辑 2.2特性 三.友元 3.1友元函数 3.2友元类 4.内部类 一.再谈构造函数 1.1构造函数体赋值 class Date { public:Date(int year,int month,int day){_year ye…

使用KEPServer连接欧姆龙PLC获取对应标签数据(标签值类型改为字符串型)

1.创建通道&#xff08;通道&#xff09;&#xff0c;&#xff08;选择对应的驱动&#xff0c;跟当前型号PLC型号对应&#xff09;。 2.创建设备&#xff0c;&#xff08;填入IP地址以及欧姆龙的默认端口号&#xff1a;44818&#xff09; 3.创建对应的标签。这里关键讲诉下字…

【VSCode实战】转换大小写快捷键

今天在VSCode Insiders上编码&#xff0c;突然想将某常量转换为大写。按照virtual studio的习惯&#xff0c;我Ctrl Shift U没有效果&#xff0c;Ctrl U也没效果。网上搜了搜&#xff0c;原来VSCode Insiders没有这个默认功能。 而VSCode Insiders这么强大怎么可能没有大小…

Keras深度学习框架实战(1):图像分类识别

1、绪论 1.1 图像分类的定义 图像分类是计算机视觉领域中的一项基本任务&#xff0c;其定义是将输入图像分配给预定义类别中的一个或多个。具体来说&#xff0c;图像分类系统接受一个图像作为输入&#xff0c;并输出一个或多个类别标签&#xff0c;这些标签描述了图像中的内容…

pytorch 指定GPU的几种方法

在使用PyTorch时,你可以通过多种方式指定和使用GPU。以下是一些常见的方法: 1. 使用torch.device torch.device是PyTorch中用于指定设备(CPU或GPU)的对象。你可以通过将张量移动到指定设备来使用GPU。 import torch# 检查是否有可用的GPU device = torch.device("…

光子芯片:突破算力瓶颈的新希望

引言 在现代计算机科学中&#xff0c;计算能力的提升是推动技术进步的核心动力。然而&#xff0c;随着摩尔定律的逐渐失效&#xff0c;传统电子芯片的算力提升面临瓶颈。光子芯片作为一种新兴技术&#xff0c;因其高频率、低损耗和高信噪比的优点&#xff0c;正成为突破算力瓶…

抖音太可怕了,我卸载了

这两天刷短视频&#xff0c;上瘾了&#xff0c;太可怕了。 自己最近一直在研究短视频制作&#xff0c;所以下载了抖音&#xff0c;说实话&#xff0c;我之前手机上并没有抖音&#xff0c;一直在用B站。 用了两天抖音&#xff0c;我发现&#xff0c;这玩意比刷B站还容易上瘾啊…