uniCloud云开发----3、uniApp中文件上传(通过插件(uniFilePicker)或者 uniCloud.uploadFile实现方案)

news2025/1/19 3:08:03

uniApp中文件上传

  • 前言
  • 效果图
  • 1、使用unifilePicker插件
    • (1)安装unifilePicker插件
    • (2)简单案例
  • 2、通过原生的 uniCloud.uploadFile来实现
  • 共同成长共同进步

前言

uniapp图片上传插件unifilePicker
在开发uniapp的时候上传文件是必不可少的,
本文的方案
1、通过unifilePicker插件来上传到云存储,然后云存储生成链接然后存入云数据库
2、通过原生的 uniCloud.uploadFile来上传到云存储,在通过云存储的链接添加到数据库

效果图

在这里插入图片描述

在这里插入图片描述

1、使用unifilePicker插件

(1)安装unifilePicker插件

在这里插入图片描述
在这里插入图片描述

(2)简单案例

<template>
	<view class="home">
		<view style="width:80%;margin: 0 auto">
			<text>上传文件</text>
			<input v-model="title" type="text" style='border:1px solid #ccc;height:40px;margin: 10px 0;'>
			<view class="upload">
				<!-- auto-upload:是否自动上传,默认为自动上传 -->
				<!-- limit:最多可以选择多少文件 -->
				<!-- 配置 file-mediatype 属性为 image,限定只选择图片 -->
				<!-- mode:上传的样式  grid:九宫格上传  list:列表上传 -->
				<!-- list-styles 格式 -->
				<!-- image-styles 格式 -->
				<!-- @select	选择文件后触发	
				@progress	文件上传时触发	
				@success	上传成功触发	
				@fail	上传失败触发	
				@delete	文件从列表移除时触发	-->
				<uni-file-picker :auto-upload="false" :limit="9" v-model="imageValue" fileMediatype="image" mode="grid"
					ref="files" @select="select" @progress="progress" @success="success" @fail="fail" />
			</view>
			<button @click="upload">上传</button>

		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: 'Hello',
				imageValue: [],
				tempFiles: []
			}
		},
		methods: {
			// 手动上传
			upload() {
				// 插件上传
				this.$refs.files.upload()
			},
			// 获取上传状态
			select(e) {
				console.log('选择文件:', e)
			},
			// 获取上传进度
			progress(e) {
				console.log('上传进度:', e)
			},

			// 上传成功
			success(e) {
				console.log('上传成功', e)
				this.Add({
					title: this.title,
					file: e.tempFilePaths
				})
			},


			// 上传失败
			fail(e) {
				console.log('上传失败:', e)
			},

			// 添加
			Add(obj) {
				uniCloud.callFunction({
					name: "cloudDemo1",
					data: obj
				}).then(res => {
					console.log(res)
				})
			},
		}
	}
</script>

在这里插入图片描述

2、通过原生的 uniCloud.uploadFile来实现

uni.chooseImage(OBJECT)选择文件的参数
在这里插入图片描述
uni.uploadFile(OBJECT) 上传文件的参数
在这里插入图片描述

<template>
	<view class='submit'>
		<input type="text" class='title' v-model="title" placeholder="标题">
		<input type="text" class='title' v-model='countent' placeholder="内容">
		<view class="imageArr">
			<view class="imagess" v-for="(item,index) in tempFiles" :key="index">
				<image :src='item.path' mode="aspectFill" @click='imageClick(index)'></image>
			</view>
			<view class="add imagess" @click='addImage'>+</view>
		</view>
		<button @click='upload'>创建</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				title: '',
				countent: '',
				tempFiles: []
			};
		},
		methods: {
			// 点击图片预览
			imageClick(index){
				uni.previewImage({
					urls:this.tempFiles,
					count:index	
				});
			},
			// 添加图片
			addImage() {
				uni.chooseImage({
					// 条数
					count: 3,
					success: res => {
						const newimg = res.tempFiles
						this.tempFiles = [...newimg, ...this.tempFiles]
					}
				})
			},

			upload() {
				// 原生上传
				let newsArr = this.tempFiles.map(async item => {
					return await this.uploadFun(item)
				})
				// 全部上传完成
				Promise.all(newsArr).then(res => {
					console.log(res)
					let arr = res.map(item => {
						return item.fileID
					})
					this.Add({
						title: this.title,
						countent: this.countent,
						files: arr
					})
				})
			},

			uploadFun(item) {
				return uniCloud.uploadFile({
					filePath: item.path,
					cloudPath: item.name,
					onUploadProgress:(progressEvent=>{
						// 进度条
						const presents = Math.round(
							(progressEvent.loaded * 100) / progressEvent.total
						);
					}),
					// 单个上传完成后调用
					// success() {
					// 	uni.showToast({
					// 		icon: 'none',
					// 		title: '上传成功',
					// 		duration: 1500
					// 	})
					// }
				})
			},
			
			// 添加的云函数
			Add(obj) {
				uniCloud.callFunction({
					name: "cloudDemo1",
					data: obj
				}).then(res => {
					console.log(res)
				})
			},
		},
	}
</script>

<style lang="scss" scoped>
	.submit {
		width: 90%;
		margin: 0 auto;

		.title {
			border: 1px solid #ccc;
			height: 40px;
			margin: 10px 0;
			padding: 2px
		}

		.imageArr {
			display: flex;
			flex-wrap: wrap;
			margin-bottom: 10px;

			.imagess {
				display: inline-block;
				width: 205rpx;
				height: 7rem;
				border-radius: 5px;
				margin: 5px;

				image {
					width: 100%;
					height: 100%
				}
			}

			;

			.add {
				background: #ccc;
				font-size: 60px;
				text-align: center;
				line-height: 7rem;
			}
		}
	}
</style>

在这里插入图片描述

共同成长共同进步

在这里插入图片描述

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

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

相关文章

从月入5千到现在的月入1W+,会计转程序员,“谁说女的不适合学编程?”

前言 我毕业五年了&#xff0c;但与技术和 Python 相关的工作经验也就两年。今天我想跟大家分享自己转行的故事&#xff0c;希望能够鼓励那些跟我一样的朋友共同前行。 我们将会聊到我个人的经历和入行故事&#xff0c;讨论快速学习的方法&#xff0c;最后推荐一些学习资源。…

“互联网+”获奖项目专访 | 阿尔兹海默症患者辅助诊断研究分享

在本届“互联网”创新创业大赛中 昇思MindSpore群英荟萃团队荣获全国总决赛铜奖 本期有幸邀请到 团队负责人李鹏和指导老师胡悦进行采访 一起来看看夺奖背后的故事吧 PART ONE 团队介绍 群英荟萃团队 1. 项目成员 李鹏、周晨、邹静、纪雨萍、李晓迪、张英豪 2. 指导老…

Insight Enterprises EDI 850 采购订单报文详解

Insight Enterprises 是一家世界 500 强解决方案集成商&#xff0c;在全球拥有 11,500 多名员工&#xff0c;帮助企业加速数字化转型。Insight为管理其庞大的供应链建立了EDI&#xff08;Electronic Data Interchange&#xff0c;中文名称是电子数据交换&#xff09;系统&#…

Android 进阶——Framework 核心之Touch事件分发机制详细攻略(一)

文章大纲引言一、Android 事件分发概述二、Touch事件分发的对象MotionEvent三、分发事件的核心对象及方法1、分发事件的核心对象2、事件分发的核心方法四、Touch事件分发的流程1、Activity的事件处理流程2、ViewGroup&View的事件分发流程五、事件分发的应用1、事件拦截2、响…

刨根问底Kafka 40问,看看你能坚持到第几问

Kafka最初是由Linkedin公司开发的&#xff0c;是一个分布式的、可扩展的、容错的、支持分区的&#xff08;Partition&#xff09;、多副本的&#xff08;replica&#xff09;、基于Zookeeper框架的发布-订阅消息系统&#xff0c;Kafka适合离线和在线消息消费。它是分布式应用系…

【JavaSE】内部类

目录 前言&#xff1a; 内部类 什么是内部类&#xff1f; 内部类的分类 1、静态内部类 1、静态内部类&#xff0c;不能直接被实例化 2、 静态内部类当中&#xff0c;不能直接访问外部类的非静态成员&#xff0c;但是可以直接访问外部类的静态成员。 3、外部类可以访问静…

java -数据结构 - 集合框架及背后的数据结构

什么是集合框架 数据结构&#xff0c;我们知道数据结构就是组织数据的一种方式&#xff0c;比如所链表&#xff0c;就是将数据存储在链表的value域中&#xff0c;next域就是存储下一个节点的地址&#xff0c;通过这样的方式将数据组织起来。 在我们学习中&#xff0c;所知道 的…

接口幂等实现基于注解(适用于分布式系统中支持spEl动态过滤)

在网络卡顿时,容易出现在极短的时间内产生重复请求,或重复支付,一般我们会在数据操作时先通过数据查询是否存在,然后再进行业务逻辑操作的方式来进行避免,但是这种方式并不是原子性,很容易出现第一次请求未进行落表,第二次重复的请求就已经通过了数据库查询,可通过设置唯一索引…

用于开发语音 AI 应用程序的 GPU 加速 SDK

NVIDIA Riva 简介&#xff1a;用于开发语音 AI 应用程序的 GPU 加速 SDK 语音 AI 用于多种应用&#xff0c;包括联络中心的座席助理以增强人类座席的能力、智能虚拟助理 (IVA) 的语音界面以及视频会议中的实时字幕。 为了支持这些功能&#xff0c;语音 AI 技术包括自动语音识别…

基于springboot的社区团购管理系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

FineReport企业报表工具-JS根据条件显示参数控件

1. 概述 1.1 版本 报表服务器版本 功能变更 11.0 -- 1.2 问题描述 在使用参数控件时&#xff0c;有时我们希望部分参数控件在没满足条件时不显示&#xff0c;满足条件后再显示&#xff0c;如下图效果&#xff0c;只有前面的下拉框选择了内容之后&#xff0c;后一层下拉框控…

【C语言】重要函数qsort函数的用法

目录 一、qsort函数的介绍 1、整形数组 2、字符数组 3、字符串 4、结构体 二、qsort函数的使用 一、qsort函数的介绍 qsort函数是一种底层快速排序的函数&#xff0c;它的特点就是可以排序任意类型的数据&#xff0c;比如&#xff1a;整形、字符串、浮点型、以及结构体类型。 …

VUE3-组件之间传值《四》

目录 一.父传子&#xff0c;父组件向子组件传值 二.子传父&#xff0c;子组件向父组件传值 三.兄弟组件之间互传&#xff0c;2个组件之间是平级关系&#xff0c;互相传值 组件之间的传值&#xff0c;分为3种方式 一.父传子&#xff0c;父组件向子组件传值 1.建立一个默认的…

零信任深入理解--概念,架构和实现方案

1. 零信任究竟解决了什么问题&#xff1f; 很多人在初步了解“零信任”概念&#xff0c;乃至进一步研究一些技术和产品方案之后&#xff0c;会有种“不过如此”的感觉。 毕竟&#xff0c; IAM&#xff08;Identity and Access Management&#xff0c;身份识别与访问管理&…

6. 【gRPC系列学习】Balance原理详解

本节开始分析Balance执行原理,通过上面流程可知,Balance Build的创建来自于Resolver的解析完成后调用updateResolverState方法,我们从updateResolverState方法开始分析Balance执行流程。 1. Balance调用流程 1)updateResolverState(s resolver.State, err error) error 方…

Java培训MySQL之全局序列

1.本地文件 不推荐&#xff0c;存在宕机序列丢失问题。 2.数据库方式 数据库序列方式原理 利用数据库一个表 来进行计数累加。但是并不是每次生成序列都读写数据库&#xff0c;这样效率太低。 mycat会预加载一部分号段到mycat的内存中&#xff0c;这样大部分读写序列都是在…

第二章:Linux的目录结构-[基础篇]

一&#xff1a;基础介绍 linux的文件系统是采用级层式的数状目录结构&#xff0c;在此结构中的最上层是根目录“/”&#xff0c;然后在此目录下再创建其他的目录。 深刻理解linux树状文件目录是非常重要的&#xff0c;这里我给大家说明一下。 记住一句经典的话&#xff1a;在Li…

通信原理循环码

目录 码多项式 码多项式的按模运算 循环码的码多项式 循环码的生成矩阵 如何寻求任一循环码循环码的生成多项式​ 码多项式 一个长度为的码组可表示成如下多项式形式&#xff1a; 多项式的系数就是码组中的各码元&#xff0c;仅是码元位置标记 。 n7 时&#xff1a; 例&…

Activiti任务的处理以及进阶使用

1.什么是流程实例 流程实例&#xff08;ProcessInstance&#xff09;代表流程定义的执行实例 一个流程实例包括所有的运行节点Task&#xff0c;所以我们一般使用来了解当前流程的进度信息 taskService.createTaskQuery().processDefinitionKey(key)例如&#xff1a;用户或者程…

力扣11.盛最多水的容器(双指针解法)

问题描述: 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容…