Springboot + elementUI实现上传用户头像

2023-10-27

最近一直在做一个背单词的小项目练手,准备着加入个新功能,想了很多种办法,本来准备利用sm.ms图床,把用户头像上传到图床然后返回链接把链接存到数据库里,后来想了想,感觉用户的头像存在那不太好,于是还是决定把用户头像存储在项目里的一个文件夹好了。

ElementUI提供了upload的组件 组件 | Element官方文档 对于我这种没啥艺术细胞的人就只能用人家提供的框架拉(不过说实话我觉得element的组件还是都挺好看的捏)我们这里就直接使用这个组件,然后我这里就直接使用自动上传了。

我想实现的功能就是用户头像下面有个按钮,点击会弹出一个窗口,是用来上传用户头像的,所以还需要用到Dialog的组件,下面是我的HTML部分代码

 <el-button plain @click="avatarDialog = true">更换头像</el-button>
 ​
 <el-dialog title="更换头像" 
            :visible.sync="avatarDialog" 
            width="80%">
     <el-upload class="avatar-uploader" 
                action="/api/up/avatar" 
                :show-file-list="false" 
                :on-success="handleAvatarSuccess" 
                :before-upload="beforeAvatarUpload">
         <img v-if="imageUrl" :src="imageUrl" class="avatar">
         <i v-else class="el-icon-plus avatar-uploader-icon"></i>
     </el-upload>
         <span slot="footer" class="dialog-footer">
             <el-button @click="avatarDialog = false">取 消</el-button>
             <el-button type="primary" @click="avatarDialog = false">确 定</el-button>
         </span>
 </el-dialog>

然后的话,我用的是Vue

 data: {
         imageUrl: '',
         avatarDialog: false,
 },
 methods: {
     handleAvatarSuccess(res, file) {
         this.imageUrl = URL.createObjectURL(file.raw);
         this.$message.success("上传成功!刷新页面查看!")
     },
     beforeAvatarUpload(file) {
         // 这里我也准备只接受jpg的格式储存所以我就直接用了官方提供的代码
         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;
     }
 }

前端不必多说叭,都是套的框架,然后后端使用的Springboot

这里用到的是commons -fileupload commons-io所以要先导入这两个依赖

 <dependency>
     <groupId>commons-fileupload</groupId>
     <artifactId>commons-fileupload</artifactId>
     <version>1.3.3</version>
 </dependency>
 <dependency>
     <groupId>commons-io</groupId>
     <artifactId>commons-io</artifactId>
     <version>2.4</version>
 </dependency>

用户头像图片的存储地址,为了不4所以我在application.yml添加了一个配置

 avatar-save-path: "/images/resource/UserAvatar/"

然后这里是CommonController

 @Value("${avatar-save-path}")
 private String avatarPath;
 ​
 @Autowired
 UserServiceImpl userService;
 ​
 @PostMapping("/up/avatar")
 public String upImg(MultipartFile file, HttpServletRequest req) throws IOException {
     log.info("Updating the File:" + file.toString());
     // 获取文件的原始名称
     String originalFilename = file.getOriginalFilename();
     // 获取原始文件的后缀,只不过我这里只接受jpg
     String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
     // 产生随机的UUID+文件后缀形成新的文件名(为了让图片没那么容易被覆盖)
     String newName = UUID.randomUUID().toString() + suffix;
 ​
     String path = ClassUtils.getDefaultClassLoader().getResource("").getPath();
     // 这里获取了session,因为当时项目访问这个接口不存在没登录的情况
     User user = (User) req.getSession().getAttribute("user");
     // 这里是生成了文件存储的路径
     String basePath = path + avatarPath;
     // 判断文件夹是否存在,不存在的话新建一个
     File dir = new File(basePath);
     if (!dir.exists()) {
         dir.mkdirs();
     }
     // 因为一开始的文件存储在临时目录里,所以这里要转存到新的地方
     file.transferTo(new File(basePath + newName));
     // 将用户的头像地址改为新的地址
     user.setAvatarUrl(avatarPath + newName);
     // 这里是修改了数据库里用户的头像地址
     userService.changeUser(user);
     // 更新Session
     req.getSession().setAttribute("user",user);
     log.info("File: " + newName + " is saved in " + basePath);
     log.info(user.getUsername() + " set avatar to " + basePath);
     // 返回新的头像地址
     return avatarPath + newName;
 }

这是俺第一次写博客,可能会有些不对的地方或者可以优化的地方,希望大佬可以给我提提建议啥的,还有希望这篇文章可以帮助到跟我一样是萌新的小伙伴。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot + elementUI实现上传用户头像 的相关文章

随机推荐

  • 如何使用 PowerShell 从 Windows 命令行发送电子邮件

    发送电子邮件是当今数字时代的一项基本任务 作为系统管理员 您可能需要从命令行发送电子邮件以自动执行此任务 在本文中 我们将向您展示如何使用 PowerShell 从 Windows 命令行发送电子邮件 从而简化您的电子邮件通信并提高您的工作
  • 如何在 Ubuntu 20.04 上安装 Elasticsearch

    Elasticsearch 是一个开源分布式全文搜索和分析引擎 它支持 RESTful 操作 允许您实时存储 搜索和分析大量数据 Elasticsearch 是最流行的搜索引擎之一 为具有复杂搜索要求的应用程序 例如大型电子商务商店和分析应
  • Bash while 循环

    循环是编程语言的基本概念之一 当您想要多次运行一系列命令直到满足特定条件时 循环会很方便 在 Bash 等脚本语言中 循环对于自动执行重复任务非常有用 Bash 脚本中有三种基本的循环结构 for loop while循环 并且直到循环 本
  • 在 Python 中解析 JSON 数据

    JSON 是一种人类可读的基于文本的数据格式 它与语言无关 用于应用程序之间的数据交换 在本文中 我们将解释如何在 Python 中解析 JSON 数据 Python JSON The json允许您对 JSON 数据进行编码和解码的模块是
  • 如何在 CentOS 7 上安装 Google Chrome 网络浏览器

    谷歌浏览器是世界上使用最广泛的网络浏览器 它是专为现代网络构建的快速 易于使用且安全的浏览器 Chrome 不是开源浏览器 也不包含在 CentOS 存储库中 它是基于Chromium 一个开源浏览器 可在EPEL 存储库 本教程介绍如何在
  • Bash 中断并继续

    循环允许您多次运行一个或多个命令 直到满足特定条件 但是 有时您可能需要更改循环流程并终止循环或仅终止当前迭代 在巴什中 break and continue语句允许您控制循环执行 Bash break陈述 The break语句终止当前循
  • 如何在 Ubuntu 18.04 上安装和使用 FFmpeg

    FFmpeg 是一个免费的开源命令行工具 用于对多媒体文件进行转码 它包含一组共享的音频和视频库 例如libavcodec libavformat和libavutil 使用 FFmpeg 您可以在各种视频和音频格式之间进行转换 设置采样率以
  • 如何在 Ubuntu 20.04 上安装 Webmin

    Webmin 是一个用于管理 Linux 服务器的开源 Web 控制面板 它允许您管理系统用户 组 磁盘配额以及安装和配置 Web ssh ftp 电子邮件和数据库服务器 With Webmin 您可以通过网络浏览器配置系统的几乎每个方面
  • Linux 中的 Wc 命令(统计行数、字数和字符数)

    在 Linux 和类 Unix 操作系统上 wc命令允许您计算每个给定文件或标准输入的行数 字数 字符数和字节数并打印结果 在本教程中 我们将向您展示如何使用wc通过简单实用的例子进行指挥 如何使用wc命令 语法为wc命令如下 wc OPT
  • 如何在 Ubuntu 20.04 上安装 Python 3.9

    Python 是世界上最流行的编程语言之一 它是一种多功能语言 用于构建各种应用程序 从简单的脚本到复杂的机器学习算法 凭借其简单易学的语法 Python 成为初学者和经验丰富的开发人员的热门选择 Python 3 9 是 Python 语
  • 如何修复 WordPress 白屏死机

    如果您有 WordPress 网站 则其中之一最常见的错误您可能会遇到白屏死机 WSOD 然而 经历它可能会很可怕 因为您可能想知道 WSOD 的根本原因 并且不知道下一步 WSOD 可能有多种可能的原因 确定它们并不容易 特别是如果您不熟
  • 如何在 CentOS 7 上安装 Go

    Go 通常称为 golang 是由 Google 创建的现代开源编程语言 许多流行的应用程序 包括 Kubernetes Docker Hugo 和 Caddy 都是用 Go 编写的 在本教程中 我们将向您展示如何在 CentOS 7 系统
  • 如何在 Ubuntu 18.04 上安装 VirtualBox

    虚拟盒子是一款开源跨平台虚拟化软件 允许您同时运行多个来宾操作系统 虚拟机 在本教程中 我们将向您展示如何在 Ubuntu 18 04 计算机上安装 VirtualBox 的两种不同方法 第一种方法描述了从 Oracle 存储库安装 Vir
  • 转化为布尔值的规则

    对于基本类型的数据 null和undefined直接转化为false 字符串 空字符串转化为false 其他全为true 数字 0和NaN转化为false 其他全为true 对于引用类型数据 全为true 所以 的结果是true 分析 中
  • 电脑数据恢复,哪种方法靠谱?

    信息化时代 电脑的需求增加了 那么很多的数据都会保存在电脑上面 万一数据丢失了 那么有什么办法能恢复呢 要想恢复电脑里面丢失的数据 也不是没有办法找回的 可以借助专业的数据恢复软件EasyRecovery进行恢复 访问http wm mak
  • 【Linux】配置网络和firewall防火墙(超详细介绍+实战)

    Liunx学习记录篇 篇一 Linux VMware安装unbuntu18 04虚拟机 超详细步骤 附镜像文件 篇二 Linux ubuntu18 04系统基础配置及操作 篇三 Linux 用户与组的操作详细介绍 篇四 Linux 管理Li
  • 彻底搞懂==和equals的区别

    概述 一提 和equals的区别很多人就会说前者是比较地址 即是否是同一个对象 而equals则是比较对象的内容是否一样 其实这是太正确的 接下来仔细分析这俩者的区别 文章目录 1 基本数据类型存储的位置 2 3 为什么所有的java类都是
  • 结构体成员内存对齐规则

    关于结构体成员内存对齐 主要有以下三方面原则 原则1 结构体中元素是按照定义顺序一个一个放到内存中去的 但并不是 紧密排列的 从结构体存储的首地址开始 每一个元素放置到内存中时 它都 会认为内存是以它自己的大小来划分的 因此元素放置的位置一
  • 爬虫中的异常处理

    URLError和HTTPError HTTPError类是URLError类的子类 导入包 import urllib error http 错误是针对浏览器无法连接到服务器而增加的错误提示 引导并告诉浏览者该页是哪里出现了问题 通过ur
  • Springboot + elementUI实现上传用户头像

    最近一直在做一个背单词的小项目练手 准备着加入个新功能 想了很多种办法 本来准备利用sm ms图床 把用户头像上传到图床然后返回链接把链接存到数据库里 后来想了想 感觉用户的头像存在那不太好 于是还是决定把用户头像存储在项目里的一个文件夹好