当前位置: 首页 > news >正文

vue+elementui+springboot图片上传

1、前端代码

<template><div><el-uploadclass="avatar-uploader"action="http://localhost:8081/ch06/demo/uploadAvatar":show-file-list="false":on-success="handleAvatarSuccess":before-upload="beforeAvatarUpload"><i class="el-icon-plus avatar-uploader-icon"></i></el-upload><div><img style=" width: 50px;height: 50px;" v-if="imageUrl" :src="imageUrl" class="avatar"></div>
</div>
</template>
<script>export default {data() {return {imageUrl: ''};},methods: {handleAvatarSuccess(res, file) {this.imageUrl = URL.createObjectURL(file.raw);},beforeAvatarUpload(file) {const isJPG = file.type === 'image/jpeg';const isLt2M = file.size / 1024 / 1024 < 2;if (!isJPG) {this.$message.error('上传头像图片只能是 JPG 格式!');}if (!isLt2M) {this.$message.error('上传头像图片大小不能超过 2MB!');}return isJPG && isLt2M;}}}
</script><style scoped></style>

以下是对这段代码的详细解释:

  • <template> 部分:

    • <el-upload> 组件:
      • class="avatar-uploader":为上传组件添加类名。
      • action="http://localhost:8081/ch06/demo/uploadAvatar":指定上传的后端接口地址。
      • :show-file-list="false":表示不显示已上传文件列表。
      • :on-success="handleAvatarSuccess":上传成功后的回调函数。
      • :before-upload="beforeAvatarUpload":上传前的校验函数。
      • <i class="el-icon-plus avatar-uploader-icon"></i>:上传组件内显示的图标。
    • <div> 内的 <img>:根据条件显示图片,图片大小设置为 50x50 像素,通过 v-if="imageUrl" 控制是否显示,:src="imageUrl" 绑定图片源地址。
  • <script> 部分:

    • data() 中定义了 imageUrl 用于存储图片的 URL。
    • handleAvatarSuccess(res, file) 方法:在上传成功后,将上传文件的原始数据转换为 URL 并赋值给 imageUrl,以便显示图片。
    • beforeAvatarUpload(file) 方法:对要上传的文件进行校验,包括文件类型必须是 image/jpeg 以及文件大小不能超过 2MB,不满足条件则弹出错误消息并阻止上传。

 2、后端代码

 /*** 上传图片* @param file* @param request* @return* @throws IOException*/@RequestMapping(value = "/uploadAvatar",method = {RequestMethod.POST})public Result imgUpDown(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {if(!file.isEmpty()) {String fileName = file.getOriginalFilename();System.out.println(fileName+"+++++");//设置上传文件的保存地址目录String dirpath=request.getServletContext().getRealPath("/upload");System.out.println(dirpath);File parentFilePath=new File(dirpath);//如果保存文件不存在就先创建目录if(!parentFilePath.exists()) {parentFilePath.mkdir();}String fileNewName = UUID.randomUUID() + fileName;File newFile = new File(parentFilePath, fileNewName);file.transferTo(newFile);return Result.success();}return null;}

以下是对这段代码的详细解读:

  • @RequestMapping(value = "/uploadAvatar", method = {RequestMethod.POST}):定义了一个处理 HTTP POST 请求的接口,路径为/uploadAvatar
  • public Result imgUpDown(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException
    • @RequestParam("file"):表示从请求参数中获取名为file的多部分文件(上传的文件)。
    • 方法内首先检查文件是否为空。如果不为空:
      • 获取文件的原始文件名并打印。
      • 通过请求获取上下文的真实路径下的/upload目录路径,并创建对应的文件对象。
      • 如果该目录不存在则创建。
      • 生成一个包含随机 UUID 和原始文件名的新文件名。
      • 根据新文件名和目录创建新的文件对象。
      • 使用file.transferTo(newFile)将上传的文件数据保存到新文件中。
      • 最后返回表示成功的结果对象。如果文件为空则返回空。

总的来说,这段代码主要实现了接收一个上传的文件,进行一些处理(包括保存路径设置、文件名处理等)并保存文件的功能。

3、效果

4、总结

第一段代码是前端部分,包含一个 el-upload 组件用于进行文件上传操作。它配置了上传的接口地址、一些显示相关的属性以及上传成功和上传前的处理函数。上传成功后会更新显示图片的 URL,上传前会对文件的类型和大小进行校验,不符合要求则给出提示并阻止上传。

第二段代码是后端部分,对应处理前端上传请求的方法。它接收上传的文件和请求对象,在文件非空的情况下,获取文件名,确定文件保存的目录路径,创建或确保目录存在,生成新文件名,创建新文件并将上传文件的数据保存到该新文件中,最后返回成功结果。若文件为空则返回空。总体上实现了文件上传的后端逻辑处理。

 

相关文章:

vue+elementui+springboot图片上传

1、前端代码 <template><div><el-uploadclass"avatar-uploader"action"http://localhost:8081/ch06/demo/uploadAvatar":show-file-list"false":on-success"handleAvatarSuccess":before-upload"beforeAvatarUpl…...

路由器怎么设置局域网?

局域网&#xff08;Local Area Network&#xff0c;LAN&#xff09;是指在一个相对较小的地理范围内&#xff0c;如家庭、办公室或学校等&#xff0c;通过路由器等设备连接起来的计算机网络。设置局域网可以方便地实现内部资源共享和信息交流。本文将介绍如何设置局域网以及一个…...

Linux2(文件类型分类 基本命令2 重定向)

目录 一、文件类型分类 二、基本命令2 1. find 帮助查询 2. stat 查看文件的信息 3. wc 统计文本 4. 查看文本内容 4.1 cat 4.2 more 4.3 less 4.4 head 4.5 tail 5. cal 显示日历 6. date 显示时间 7. du 文件大小 8. ln 链接 软链接 硬链接 区别 9. histo…...

c->c++(一):部分KeyWord

本文主要探讨c相关关键字的使用。 char char默认是unsigned/signed取决平台,wchar_t宽字符:用于Unicode编码(超过一个字节),用wcin和wcout输入输出,字符串为wstring char8_t(20),char16_t(11起),char32_t(11):指定占用字节数且是无符号,字符串类u8string,u16s…...

【iOS】YYModel源码阅读笔记

文章目录 前言一、JSON转换库对比二、YYModel性能优化三、YYModel的使用四、架构分析YYClassInfo 剖析 五、流程剖析转换前准备工作 – 将JSON统一成NSDictionary将NSDictionary 转换为Model对象提取Model信息使用NSDictionary的数据填充Model 总结 前言 先前写了JSONModel的源…...

C++Qt做一个鼠标在按钮上悬浮3s显示一个悬浮窗口

当你想要在 Qt 中创建一个自定义按钮并添加悬浮窗口的功能时&#xff0c;你可以通过继承 QPushButton 类来实现。下面是一个示例代码&#xff0c;演示了如何创建一个自定义按钮类 HoverButton&#xff0c;并在鼠标悬浮在按钮上 3 秒后显示一个悬浮窗口&#xff0c;窗口包含图片…...

sslh一键在一个端口上运行多个服务(KALI工具系列二十三)

目录 1、KALI LINUX 简介 2、sslh工具简介 3、信息收集 3.1 目标主机IP&#xff08;win&#xff09; 3.2 KALI的IP 4、操作示例 4.1 监听特定端口 4.2 配置SSH 4.3 配置apache 4.4 配置sshl 4.5 验证配置 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功能强大、…...

Vue27-内置指令04:v-once指令

一、需求 二、v-once指令 获取初始值&#xff1a; 三、小结...

Pytorch环境配置的方法

Pytorch虚拟环境配置全流程 以安装pytorch1.9.1为例 1. 创建虚拟环境 安装Anaconda3&#xff0c;打开 PowerShell 创建虚拟环境并进入&#xff1a; conda create -n torch1.9.1 python3.8 conda activate torch1.9.1 conda create -n torch1.9.1 python3.8 conda activate to…...

数字化制造案例分享以及数字化制造能力评估(34页PPT)

资料介绍&#xff1a; 通过全面的数字化企业平台和智能制造技术的应用&#xff0c;制造型企业不仅提升了自身的竞争力&#xff0c;也为整个制造业的数字化转型提供了借鉴。同时&#xff0c;数字化制造能力的评估是企业实现数字化转型的关键环节&#xff0c;需要从技术变革、组…...

搜维尔科技:特斯拉称工厂内有两台人形机器人开始自主工作

搜维尔科技消息&#xff0c;据外电报道&#xff0c;特斯拉声称&#xff0c;其目前拥有两台 Optimus 人形机器人在工厂内自主工作&#xff0c;这尚属首次。 如果目前这场薪酬方案混乱有什么好处的话&#xff0c;那就是特斯拉几乎看起来又有了一个公关部门。 当然&#xff0c;其…...

SIGMOD 2024 | 时空数据(Spatial-Temporal)和时间序列(Time Series)论文总结

SIGMOD2024于6月9号-6月14号正在智利圣地亚戈举行&#xff08;Santiago Chile&#xff09; 本文总结了SIGMOD 2024有关时间序列&#xff08;time series&#xff09;,包括时序数据库&#xff0c;查询优化等内容。以及时空数据&#xff08;spatial-temporal data&#xff09;的…...

学习分享-分布式 NoSQL 数据库管理系统Cassandra以及它和redis的区别

前言 最近在学习的过程中遇到如何应对海量幂等 Key 所消耗的内存的问题&#xff0c;在网上查找资料了解到Cassandra或许是解决方式之一&#xff0c;所以查找了Cassandra的相关资料及其Cassandra和redis的区别。 什么是Cassandra Cassandra 是一个开源的分布式 NoSQL 数据库管…...

Android 汉字转拼音(两行就够了)

在Android中&#xff0c;我们可以使用Android自带的Transliterator类来实现汉字转拼音的功能。下面是使用Transliterator类的示例代码&#xff1a; 在你的Activity或者工具类中&#xff0c;使用以下代码来实现汉字转拼音的功能&#xff1a; import android.support.v7.app.Ap…...

JVM

栈 定义 每个线程运行时所需要的内存, 称为虚拟机栈每个栈由多个栈帧(包含参数, 局部变量, 放回值)组成, 对应着每次方法调用时所占用的内存每个线程只能有一个活动栈帧, 对应着当前正在执行的那个方法 堆 定义: 通过new关键字, 创建对象都会使用堆内存 特点:它是线程共享…...

MySQL锁机制和事务管理:如何处理并发和隔离性

引言 在数据库系统中,多个用户可能同时访问和修改数据,这就是并发操作。并发操作的主要优势在于,它显著提高了资源的利用率和事务的吞吐量。然而,如果不适当的管理并发操作,就会引发一些问题。以下几种并发操作中常见的问题: 丢失修改:这是某一事务的更新被另一事务的…...

特别名词Test Paper7

特别名词Test Paper7 potteries 陶器power 权力&#xff1b;能源powerpoint 投影的文件precaution 预防precision 精密度preference 偏爱preposition 介词prescription 药方presentation 演讲&#xff1b;陈述preservation 保存president 总统&#xff1b;校长&#xff08;大学…...

2的n次方表格

做项目的时候有时候会担心数据溢出&#xff0c;常用的数据长度就有8位、16位、32位、64位。相信八位都很容易记住就是256&#xff0c;16位是65536&#xff0c;但是数字一大就记不住了&#xff0c;甚至连换算为十进制是多少位都不得而知。 下表中就有1 ~ 64位数据的范围。 0次…...

EVS9329-ES驱动器EVS9329ES可议价

EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES步进电机按结构分类&#xff1a;步进电动机也叫脉冲电机&#xff0c;包括反应式步进电动…...

JSON、yam|fIProperties

JSON、YAML和Properties都是数据序列化和存储的格式&#xff0c;它们各自有独特的特点和适用场景。 1. JSON (JavaScript Object Notation) : 特点&#xff1a;JSON是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。它基于ECMA…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...