uniapp图片上传说明

news2024/12/29 16:06:43

目录

1.文件上传组件

2.单文件上传

3.多文件上传

4.图片的回显

5.注意点


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.图片的回显

图片上传之后,不管是保存在本地或者时文件服务器上,需要在列表页进行数据的查看和修改,就涉及到图片的显示。

要进行图片的回显,需要设置uni-file-picker组件中的v-model绑定的值,绑定的值的格式是一个对象数组。结构如下:

需要设置图片的url地址,名称及后缀。未上传的文件,设置图片执行保存房后返回的地址,已经上传至服务器的图片,设置服务器中的文件地址(文件服务器使用nginx进行代理)。

示例:

				formData.value = response.resBody;
				if (response.resBody.fileList) {
					for (const item of response.resBody.fileList) {
						fileInfo.value = [...fileInfo.value, {
							name: item.fileNm,
							extname: item.fileSuffix,
							url: item.fileLoca
						}]
					}
				}

5.注意点

①保存图片信息时需要调用图片保存的方法,将图片存储起来。因为选择之后返回的是图片的临时路径,一旦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() 前端+后端代码 - 简书

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

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

相关文章

【JAVA基础】DeferredResult使用详解

简介 Servlet3.0提供了基于servlet的异步处理api&#xff0c;Spring MVC只是将这些api进行了一系列的封装&#xff0c;从而实现了DeferredResult。 DeferredResult字面意思是"延迟结果"&#xff0c;它允许Spring MVC收到请求后&#xff0c;立即释放(归还)容器线程&…

OpenCV4工业缺陷检测的六种方法

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

【递归 回溯】LeetCode-17. 电话号码的字母组合

17. 电话号码的字母组合。 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digit…

轻量级web开发框架Flask本地部署及无公网ip远程访问界面

文章目录 前言1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 前言 本篇文章讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网上并进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用P…

JDBC常用API

在开发JDBC程序前&#xff0c;先了解一下JDBC常用的API。JDBC API主要位于java.sql包中&#xff0c;该包定义了一系列访问数据库的接口和类。 &#xff08;1&#xff09;Driver接口 Driver接口是所有JDBC驱动程序必须实现的接口&#xff0c;该接口专门提供给数据库厂商使用。需…

windows11下载GCC编译器

下载 1. 打开MinGW官网 2. 点击下载, 进入后选择下载在Window系统 3. 选择在github上面下载, 进入后下载下面两个即可, 一个是编译器, 一个是源码. 考虑跨平台性, 下载posix版本, 只在Windows下开发应用就下载win32, 不知道就下载前者. win11选择ucrt, 之前版本选择msvcrt. 配…

pr插件|特殊编码.mkv/mov/flv/webm/avi/wmv/vob等多种格式视频素材直接导入pr的插件 Influx v1.2.5

适用于Adobe的一体式原生导入器插件&#xff08;Premiere Pro、After Effects和Media Encoder&#xff09;。支持多种格式和编解码器。 主要特点 直接在Adobe CC Video中进行本机导入 不再需要通过外部转码软件&#xff01;节省时间、磁盘空间和麻烦 在Premiere Pro中导入和编辑…

org.slf4j日志组件实现日志功能

slf4j 全称是Simple Logging Facade for Java。facade是一种设计模式。 slf4j 是一个抽象程度更高的日志组件&#xff0c;本身并不提供实际的日志功能。实际的日志功能是通过log4j等日志组件实现&#xff0c;而使用者只需要关心 slf4j 给出的API。 slf4j 仅仅是一个为Java程序提…

Redis BitMap(位图)

这里是小咸鱼的技术窝&#xff08;CSDN板块&#xff09;&#xff0c;我又开卷了 之前经手的项目运行了10多年&#xff0c;基于重构&#xff0c;里面有要实现一些诸如签到的需求&#xff0c;以及日历图的展示&#xff0c;可以用将签到信息存到传统的关系型数据库&#xff08;MyS…

基于SpringBoot的超市账单管理系统 JAVA简易版

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3.3 后端设计在这里插入图片描述 四、系统展示五、核心代码5.1 查询供应商5.2 查询商品5.3 新增超市账单5.4 编辑超市账单5.5 查询超市账单 六、免责说明 一、摘要 1.1 项目介绍 基于…

JS模块化规范之ES6及UMD

JS模块化规范之ES6及总结 前言ES6模块化概念基本使用ES6实现 UMD(Universal Module Definition)总结 前言 ESM在模块之间的依赖关系是高度确定的&#xff0c;与运行状态无关&#xff0c;编译工具只需要对ESM模块做静态分析&#xff0c;就可以从代码字面中推断出哪些模块值未曾被…

快速排序(非递归)以及归并排序的递归与非递归

快速排序的非递归算法&#xff1a; 递归次数太多的缺陷&#xff1a;极端情况下&#xff08;栈帧深度太深&#xff09;会导致栈溢出&#xff0c;即使程序代码正确&#xff08;递归的深度足够深时&#xff0c;空间不足&#xff0c;就会导致栈溢出&#xff09;&#xff0c;因此在…

hbase用shell命令新建表报错ERROR: KeeperErrorCode = NoNode for /hbase/master

或者HMster开启后几秒消失问题解决 报错如图&#xff1a; 首先jps命令查看当前运行的内容有没有HMaster,如果没有&#xff0c;开启一下hbase,稍微等一会儿&#xff0c;再看一下HMaster,如果仍和下图一样没有&#xff0c;就基本找到问题了 本人问题原因&#xff1a;hbase-site…

【深入使用】PHP的PDO 基本使用

前言&#xff1a; PDO&#xff1a;数据库抽象层 简介&#xff1a;PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口&#xff0c;PDO解决了数据库连接不统一的问题。是PHP 5新加入的一个重大功能 【为什么要使用PDO】&#xff1f; PDO是PHP5新加入的一个重大功能&a…

hab_virtio hypervisor 虚拟化

Linux的 I / O 虚拟化 Virtio 框架 简而言之&#xff0c;virtio是半虚拟化管理程序中设备上的抽象层。virtio由Rusty Russell开发以支持他自己的虚拟化解决方案lguest。本文从准虚拟化和仿真设备的介绍开始&#xff0c;然后探讨的细节virtio。重点是virtio2.6.30内核发行版中的…

提前预判和确认再做 现货白银投资的两种思路

在现货白银投资中&#xff0c;对于交易的步骤长期有两种看法。一种是提前预判行情并提前布局。另外一种是等待行情启动再做布局。这种两种方法要怎么选呢&#xff1f;笔者将从自己的角度出发&#xff0c;对这个问题进行讨论。 我们来看一下前一种的投资者&#xff0c;他们喜欢提…

vulnhub-Tre(cms渗透)

靶机和kali都使用net网络&#xff0c;方便探测主机获取ip1.靶机探测 使用fping扫描net网段 靶机ip&#xff1a;192.168.66.130 2.端口扫描 扫描发现该靶机三个端口&#xff0c;ssh&#xff0c;还有两个web&#xff0c;使用的中间件也是不一样的&#xff0c;一个是apache&…

TortoiseGit通过SSH连接配置,生成SSH密钥方法

生成SSH密钥&#xff1a; Win环境下命令(git ssh key是可以自定义命名的)&#xff1a; ssh-keygen -t ed25519 -C "git ssh key" && start "" "C:\Windows\notepad.exe" "C:\Users\%username%\.ssh\id_ed25519.pub" 打开cm…

指针---你真的会使用指针吗?

指针作为C语言中的一个部分&#xff0c;可以说指针是C语言的核心&#xff0c;那么它的难度肯定是不言而喻的&#xff0c;总是能把人给绕得找不到方向。 今天我就好好的说一说指针这个东西。 1、何为指针&#xff1f; 指针是C语言中用来存放地址的一个变量类型。我们可以将指针看…

图像增强2023最新经典顶会论文和代码合集,附开源数据集下载

图像增强是图像处理领域长期的、不可回避的研究课题&#xff0c;也是活跃在各大顶会中的热门研究方向。其应用范围广泛涉及医学影像分析、安全监控、智能交通、目标检测与识别、遥感影像处理等领域&#xff0c;具有很高的实用性&#xff0c;因此每年的相关论文数量也比较多。 …