uniapp图片上传说明

目录

1.文件上传组件

2.单文件上传

3.多文件上传

4.注意点


1.文件上传组件

前端上传组件使用uni-file-picker,可以自行进行下载使用。默认上传到绑定的服务空间,配置属性auto-upload为false关闭自动上传,可以限定上传的是图片还是文件,具体的可以参照官方文档。总共有5个事件,如果不使用自动上传,只需要select事件和delete事件即可,select事件获取选择的图片信息,可以配置选择一个或者多个。delete事件获取删除的图片信息。图片的上传示例如下:

			<uni-forms-item label="现场照片" class="uni-form-item">
				<uni-file-picker ref="filePicker" v-model="fileInfo" file-mediatype="image" mode="grid"
					file-extname="png,jpg" :limit="6" @select="select" @delete="deleteFile" return-type="array"
					:auto-upload="false" />
			</uni-forms-item>
	const select = async (e : any) => {
		e.tempFiles.forEach((item : any) => {
			fileInfo.value.push({
				name: item.name,
				extname: item.extname,
				url: item.url,
				fileType: item.fileType,
				image: item.image,
				path: item.path,
				size: item.size,
				uuid: item.uuid,
				status: item.status,
				cloudPath: item.cloudPath
			});
		})
	}
	const deleteFile = async (e : any) => {
		const num = fileInfo.value.findIndex((item : any) => item.url == e.tempFilePath)
		fileInfo.value.splice(num, 1);
		// 删除本地存储的图片
		uni.removeSavedFile({
			filePath:e.tempFilePath,
		})
	}

select方法将获取选择的图片信息,存储到fileInfo数组中;delete方法,获取要删除的图片信息,然后将存储在fileInfo数组中的图片删除。

2.单文件上传

官方文档:uni.uploadFile(OBJECT) | uni-app官网

使用uni.uploadFile方法进行文件上传。 

前端:

		uni.uploadFile({
			url: 'http://10.1.36.39:8098/xxxx/file/upload',
			header: {
				'Content-Type': 'multipart/form-data',
			},
			filePath: '_doc/uniapp_save/17024591291590.png',
            name: 'file',
			formData: {
				userId: '123'
			},
			success: function (res) {
				console.log('上传成功')
			},
			fail: function (err) {
				console.log('上传失败', JSON.stringify(err));
			}
		})

 后端:

    @ApiOperation(value = "上传文件数据接口")
    @PostMapping(value = "/upload")
    public String upload(@RequestPart(value = "file") MultipartFile file) {
        RtnBean rtnBean = sftpService.uploadFile(file);
}

单文件上传,filePath和name必须填写。filePath是要上传文件的路径,name属性的内容和后端接口中的参数名一致。

后端可以通过@RequestParam(value = "userId") String userId,来接收formData中的内容。

3.多文件上传

前端

		uni.uploadFile({
			url: 'http://10.1.36.39:8098/xxxx/file/upload',
			header: {
				'Content-Type': 'multipart/form-data',
			},
			files: [{ name: '123', uri: '_doc/uniapp_save/17024591291590.png' }, { name: '123', 'uri': '_doc/uniapp_save/17024591291601.png' }],
			formData: {
				userId: '123'
			},
			success: function (res) {
				console.log('上传成功')
			},
			fail: function (err) {
				console.log('上传失败', JSON.stringify(err));
			}
		})

后端:

    @ApiOperation(value = "上传文件数据接口")
    @PostMapping(value = "/upload")    
public String upload(HttpServletRequest request) {
        CommonsMultipartResolver commonsMultipartResolve = new CommonsMultipartResolver(request.getSession().getServletContext());
        commonsMultipartResolve.setDefaultEncoding("utf-8");
        if(commonsMultipartResolve.isMultipart(request)){
            MultipartHttpServletRequest mulReq = (MultipartHttpServletRequest) request;
            Map<String, MultipartFile> map = mulReq.getFileMap();
            List<MultipartFile> resultList = new ArrayList<>();
            if(!map.isEmpty()){
                for (Map.Entry<String, MultipartFile> result : map.entrySet()) {
                    resultList.add(result.getValue());
                }
                System.out.println(resultList.size());
            }
        }
}

 多文件上传要使用files设置文件的信息。files的格式如下:

注意上传多个文件时,uri是文件路径,必须设置。name是文件的名字,上传多个文件时,名字必须设置,并且不能重复,如果存在3重复名字的文件,后端只能获取到一个。 

后端直接从request中获取前端传递的文件信息,也可以通过@RequestParam(value = "userId") String userId,来接收formData中的内容。

4.注意点

①保存图片信息时需要调用图片保存的方法,将图片存储起来。因为选择之后返回的是图片的临时路径,一旦app关闭,如果图片没有上传到服务器的话,会导致之前上传的图片无法显示,临时文件的生命周期是在app运行时生效,关闭则失效。存储方法如下:

			uni.saveFile({
				tempFilePath: item.url,
				success: (res) => {
					item.url = res.savedFilePath
					resolve(item)
				},
				fail: () => {
					reject()
				}
			})

// 传入临时文件路径,返回保存的路径

②文件上传到服务器后,需要调用删除方法,将上面保存的文件或图片删除掉。避免一致占用手机的存储空间。

		// 删除本地存储的图片
		uni.removeSavedFile({
			filePath:e.tempFilePath,
		})

③注意单文件上传和多文件上传时属性的设置。

④注意单文件上传和多文件上传时后端的文件接收方式及formData中的参数接收方式。

参照:

uniapp多文件上传 uni.uploadFile() 前端+后端代码 - 简书

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【PHP入门】1.3-数据类型、转换、判断

-数据类型- 数据类型&#xff1a;data type&#xff0c;在 PHP中指的是存储的数据本身的类型&#xff0c;而不是变量的类型。 PHP是一种弱类型语言&#xff0c;变量本身没有数据类型。 1.3.1PHP的八种数据类型 在PHP中将数据分为三大类八小类&#xff1a; 简单&#xff0…

JavaSE学习笔记 Day20

JavaSE学习笔记 Day20 个人整理非商业用途&#xff0c;欢迎探讨与指正&#xff01;&#xff01; 上一篇 文章目录 JavaSE学习笔记 Day20十七、数据结构与算法17.1算法17.1.1冒泡排序17.1.2选择排序17.1.3插入排序17.1.4三个排序的区别 17.2顺序表17.2.1顺序表代码实现17.2.2顺…

JavaEE:线程池精讲

目录 一.什么是线程池 二.线程池的实现原理 &#x1f388;为什么要有工厂模式&#xff1f; 三.线程池的构造方法解读 &#x1f388;线程池的拒绝策略 四.自己实现一个线程池 一.什么是线程池 简单来说&#xff0c;线程池就好比一块鱼塘&#xff0c;鱼塘中的每条鱼就是一个线程…

HackTheBox - Medium - Windows - Authority

Authority 终于把easy的机器刷的八八九九了&#xff0c;开始新一轮的Medium机器&#xff0c;Medium难度以上的我都会写wp&#xff0c;保持学习&#xff0c;我的CRTO进度也快结束了。 Authority是一台中等难度的 Windows 计算机&#xff0c;它强调了错误配置、密码重用、在共享…

2023 英特尔On技术创新大会直播 |让更多人了解AI魅力

2023 英特尔On技术创新大会直播 |让更多人了解AI魅力 前言&#xff1a;主要领域:人工智能&#xff1a;使用 OpenVINO™ 落地边缘端生成式 AIOpenVINO™学习总结&#xff1a; 新一代 AI PC计算平台&#xff1a;新一代至强平台&#xff1a;边云协同&#xff1a;先进技术&#xff…

深入探索Git的高级技巧与神奇操作(分支,高效合并)

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 深入探索Git的高级技巧与神奇操作 前言强制推送的妙用1. 什么是强制推送&#xff1f;2. 为什么需要使用强制推送&#xff1f;3. 强制推送的风险与注意事项4. 如何正确、安全地执行强制推送步骤&#x…

JDK21+HADOOP3.2.2+Windows安装步骤

哈哈哈 最近转战大数据这块了&#xff0c;分享一下hadoop3.2.2的安装步骤 借鉴了不少大佬的文章&#xff0c;如有雷同&#xff0c;都是大佬们的 1.JDK安装 我选择的是JDK21 以下是下载网址和截图&#xff0c;这个没有太多的&#xff0c;一般下载最新的就可以 JDK: Java Down…

Golang学习之路一一Hello, World

Golang学习之路一一Hello, World golang工作目录下src下新建一个项目demo,如图: 在demo下新建hello_world.go文件,内容如下: package main //声明本文件的package名import "fmt" //import语言的fmt库——---用于输出func main() {fmt.Println("Hello, World!&…

【2.2操作系统】进程管理

目录 1.进程的基本概念2.进程的状态3.信号量与PV操作4.前趋图5.死锁6.银行家算法 1.进程的基本概念 &#x1f31f;进程是程序在一个数据集合上运行的过程&#xff0c;它是系统进行资源分配和调度的一个独立单位。它由程序块、进程控制块 (PCB) 和数据块三部分组成。 &#x1f…

一款视频行为分析系统,可轻松开发安全行为检测

系列版本介绍 基于视频行为分析系统v4系列版本可以在不用考虑流媒体音视频开发&#xff0c;编解码开发&#xff0c;界面开发等情况下&#xff0c; 只需要训练自己的模型&#xff0c;开发自己的行为算法插件&#xff0c;就可以轻松开发出任何你想要的安全行为检测&#xff0c;比…

浅谈云性能测试的关键要点

随着云计算的广泛应用&#xff0c;云性能测试成为确保云服务质量和性能的关键环节。云性能测试不仅涵盖了传统性能测试的方面&#xff0c;还需要考虑云环境的特殊性。以下是云性能测试的几个关键要点&#xff1a; 1. 模拟真实云环境 云环境具有虚拟化、弹性扩展等特点&#xff…

视频去水印怎么去掉?这三个去水印方法值得收藏

视频去水印怎么去掉&#xff1f;对于视频去水印&#xff0c;对于那些对去水印软件不是很熟悉的人来说&#xff0c;可能会感到有些困难。但是&#xff0c;不用担心&#xff0c;今天就来为大家介绍几种视频去水印软件和教你们视频去水印的详细步骤&#xff0c;让你们轻松去掉视频…

TOUGH系列软件实践技术应用

TOUGH系列软件是由美国劳伦斯伯克利实验室开发的&#xff0c;旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同&#xff0c;TOUGH系列软件采用模块化设计和有限积分差网格剖分方法&#xff0c;通过配合不同状态方程&#xff08;EOS模…

whisper深入-语者分离

文章目录 学习目标&#xff1a;如何使用whisper学习内容一&#xff1a;whisper 转文字1.1 使用whisper.load_model()方法下载&#xff0c;加载1.2 使用实例对文件进行转录1.3 实战 学习内容二&#xff1a;语者分离&#xff08;pyannote.audio&#xff09;pyannote.audio是huggi…

选数C语言

分析&#xff1a;这个题目主要解决两个问题 1.将数字选出来&#xff0c;不能重复的选出k个数字&#xff0c;并且要对选出来的数字进行求和 2.对求和的数字进行判断是否为素数&#xff0c;如果是就统计一次&#xff0c;如果不是就不统计 1.如果我们想选两两为一组的数字&#…

ansible远程操作主机功能和自动化运维

ansible 两个功能&#xff1a;1、远程操作主机功能 2、自动化运维&#xff08;play 剧本 yaml&#xff09; 简述&#xff1a; 是基于python开发的配置管理和应用部署工具。在自动化运维中&#xff0c;现在是异军突起。 Asible能批量配置&#xff0c;部署&#xff0c;管理上千…

锐捷 | AP利用路由网络发现AC

//AP与交换机进行测试获取信息 how lldp neighbors detail //在DHCP服务器中查看是否将IP分配给了AP 注&#xff1a;若AP为静态IP地址&#xff0c;则该命令无法查看 show ip dhcp binding | inc 300d.9e86.a9xx (到底啦~~~)

LLM之RAG实战(六)| 高级RAG 02:选择最佳embedding和重排序模型

在构建检索增强生成&#xff08;RAG&#xff09;Pipeline时&#xff0c;一个关键组件是Retriever。我们有多种embedding模型可供选择&#xff0c;包括OpenAI、CohereAI和开源sentence transformers。此外&#xff0c;CohereAI和sentence transformers还提供了几个重排序器。 但…

探索Qt 6.3:了解基本知识点和新特性

学习目标&#xff1a; 理解Qt6.3的基本概念和框架&#xff1a;解释Qt是什么&#xff0c;它的核心思想和设计原则。学会安装和配置Qt6.3开发环境&#xff1a;提供详细的步骤&#xff0c;让读者能够顺利安装和配置Qt6.3的开发环境。掌握Qt6.3的基本编程技巧&#xff1a;介绍Qt6.…

python接口自动化测试--requests使用和基本方法封装

之前学习了使用jmeterant做接口测试&#xff0c;并实现了接口的批量维护管理(大概500多条用例)&#xff0c;对“接口”以及“接口测试”有了一个基础了解&#xff0c;最近找了一些用python做接口测试的资料&#xff0c;一方面为了学习下如何使用python进行接口测试(如何做出一个…