SpringBoot+Thymeleaf上传头像并回显【表单提交】

news2024/11/16 15:55:53

参考文章:springboot+thymeleaf实现图片上传并回显https://www.wanmait.com/note/shaowei/javaee/b3717a24fde24d3e89c47765a1a63214.html

一、新建SpringBoot项目

添加 spring web和 thymeleaf 的依赖

二、在templates新建页面

在页面中添加一个表单和一个文件上传控件、一个按钮用于提交表单

一个img标签用于图片回显

<div class="head">
    <!--上传头像-->
    <div th:if="${#session.getAttribute('loginUser').headerImage==null}">
        <span><img th:src="@{/images/header.png}" width="90" height="90"/></span>
    </div>
    <div th:unless="${#session.getAttribute('loginUser').headerImage==null}">
        <span><img th:src="@{|/image/${#session.getAttribute('loginUser').headerImage}|}"width="90" height="90"/></span>
    </div>
    <form action="/web/loan/page/uploadHeader" method="post" enctype="multipart/form-data">
        <input type="file" value="选择头像" accept="image/*">
        <input type="submit" value="上传头像">
    </form>
</div>

三、新建控制器

页面提交表单后上传图片并返回到此页面

    //获取本地文件 更新头像
    @PostMapping("/loan/page/uploadHeader")
    public String uploadHeader(MultipartFile file, HttpServletRequest request, Model model) throws IOException {
        //1.获取上传文件名字
        String fileName = file.getOriginalFilename();
        //2.通过上传文件名字截图后缀名
        String fileNameLast = fileName.substring(fileName.indexOf("."));
        //3.定义新的文件名字
        String newFileName = UUID.randomUUID().toString() + fileNameLast;
        //4.获取上传图片路径
        String path = ResourceUtils.getURL("classpath:").getPath() + "static/image/";
        File uploadPath = new File(path + newFileName);
        //5.如果上传目录不存在,创建目录
        if (!uploadPath.exists()) {
            uploadPath.mkdirs();
        }
        //6.上传文件
        file.transferTo(uploadPath);
        //7.更新 用户头像
        User user = (User) request.getSession().getAttribute(Constants.LOGIN_USER);
        user.setHeaderImage(newFileName);
        userService.insertHeaderImage(user);

        return "myCenter";
    }
    //更新 用户头像
    @Override
    public void insertHeaderImage(User user) {
        userMapper.updateByPrimaryKeySelective(user);
    }

 

四、在application.properties配置文件

添加上传文件大小的控制

#单个文件上传的最大值
spring.servlet.multipart.max-file-size=5MB
#上传文件总的最大值
spring.servlet.multipart.max-request-size=10MB

五、运行项目

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

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

相关文章

8086,8088CPU管脚,奇偶地址体, ready信号,reset复位信号。规则字和非规则字

8086/8088均为40条引线&#xff0c;双列直插式封装&#xff0c;某些引线有多重功能&#xff0c;其功能转换有两种情况&#xff1a;一种是分时复用&#xff0c;一种是按组态定义。 用8088微处理器构成系统时&#xff0c;有两种不同的组态&#xff1a; 最小组态&#xff1a;808…

@AutoWired与@Resource

参考 : Qualifier - 搜索结果 - 知乎 Autowired和Resource的区别是什么&#xff1f; - 知乎 面试突击78&#xff1a;Autowired 和 Resource 有什么区别&#xff1f; - 掘金 目录 同一类型多个Bean报错问题 Resource注解 Resource的查找顺序 Resource注解实现依赖注入 Reso…

网课题库接口调用方法

网课题库接口调用方法 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点…

QT对象树机制

Qt提供了对象树机制&#xff0c;能够自动、有效的组织和管理继承自QObject的Qt对象。 每个继承自QObject类的对象通过它的对象链表&#xff08;QObjectList&#xff09;来管理子类对象&#xff0c;当用户创建一个子对象时&#xff0c;其对象链表相应更新子类对象信息&#xff0…

Docker快速入门

容器Docker技术的演进 1.曾经部署应用&#xff0c;使用物理机部署&#xff0c;这可能会因为不同应用所依赖的版本号不同&#xff0c;不得已购买一套全新的机器&#xff0c;所以成本高、部署慢、资源浪费、难以迁移和拓展、可能会被限定硬件厂商。 2.之后引入了VMVare&#xff…

使用JPA和Hibernate查询分页

介绍 受到我最近给出的StackOverflow答案的启发&#xff0c;我决定是时候写一篇关于使用JPA和Hibernate时查询分页的文章了。 在本文中&#xff0c;您将了解如何使用查询分页来限制 JDBC大小并避免获取不必要的数据。ResultSet 如何在#Hibernate中使用查询分页来限制 JDBC 结…

pytorch深度学习实战lesson32

第三十二课 分布式训练 这个是15年的时候沐神在 CMU 装的一个小机群&#xff0c;里面有30台机器&#xff0c;各机群有大概60块 GPU &#xff0c; 60块 GPU一共花了三四万美金的样子&#xff0c;就是大概20万人民币。沐神表示最亏的是当年他们跑了太多深度学习的实验&#xff0c…

C语言-const char*,char const*,char *const理解

By: Ailson Jack Date: 2022.12.04 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/150.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

传奇外网开服教程-GEE传奇外网全套架设教程

版本不同&#xff0c;所用的引擎和配置也会不同&#xff0c;但是架设方法都是大同小异&#xff0c;今天明杰给大家分享GEE引擎的外网架设教程。​ 需要准备的东西&#xff1a;DBC200版本&#xff0c;补丁&#xff0c;客户端&#xff0c;服务器&#xff0c;备案域名&#xff0c…

【Typora】Typora 新手入门参数配置记录

目录 写在前面 更改图片大小 更换高亮背景 更换主题 写在前面 最近发现一款记笔记的软件——Typora&#xff0c;极简清爽的外观一下子就把我给吸引住了&#xff0c;它支持Markdown 的格式记录&#xff0c;可以让笔记更加有条理、美观&#xff0c;至于 typora 的一些写作语法…

Android入门第43天-Activity与Activity间的互相传值

介绍 今天的课程会比较好玩&#xff0c;我们在之前的Service篇章中看到了一种putExtras和getExtras来进行activity与service间的传值。而恰恰这种传值其实也是Android里的通用传值法。它同样可以适用在activity与activity间传值。 Android中的传值 传单个值 传多个值 具体我…

Spring注解(简便地使用 Bean )

目录 0. 前置工作 1. 将 Bean 存储到容器 2. 对象注入&#xff08;对象装配&#xff09;【从容器中将对象读取出来】 0. 前置工作 创建Maven项目后&#xff0c;在pom.xml中添加Spring所必须的依赖。 <dependencies><dependency><groupId>org.springframe…

22个每个程序员都应该知道的 Git 命令

在这篇文章中&#xff0c;我写了一个快速学习 git 命令的备忘单。它将包括开发人员每天使用的命令&#xff0c;如 git add、git commit、git pull、git fetch&#xff0c;并共享其他有用的 git 命令。 我一直使用Git的一些命令&#xff0c;今天这个列表清单&#xff0c;希望也…

LC-6256. 将节点分成尽可能多的组(二分图判定+BFS)【周赛322】

6256. 将节点分成尽可能多的组 难度困难8 给你一个正整数 n &#xff0c;表示一个 无向 图中的节点数目&#xff0c;节点编号从 1 到 n 。 同时给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间有一条 双向 边。注意给定的图可能是不…

第4章 R语言编程基础——数据整理与预处理

目录 4.1 经济/金融数据库 4.1.1 金融数据与数据库 4.1.2 国外金融数据库概况 4.1.3 国内金融数据库概况 4.1.4 数据的主要内容 4.2 数据格式 4.3 数据的导入 4.3.1 从控制台上输入数据 4.3.2 上市公司财务报表信息读取 4.4 [数据的预处理] 4.1.1 时序数据的预处理 4.1.2…

[附源码]Python计算机毕业设计Django汽车租赁管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

WEB前端网页设计 HTML网页代码 基础参数(二)

html文件调用css文件 <link rel"stylesheet" type"text/css" href"css文件相对路径"/> 设置颜色 Style"color:green;" 设置字体大小 font-size:50px; 设置边框 border&#xff1a;groove&#xff1b; 设置长、宽 heigh…

【通信原理】数字基带传输的线路码型

数字基带传输的线路码型 简单介绍数字基带传输的线路码型的信号波形的特点&#xff0c;以及生成方法。注意观察频谱。文末附Matlab代码。 以下包括双极性NRZ、单极型NRZ、双极型RZ、单极型RZ、差分码&#xff0c;曼切斯特码/数字双相码、密勒码、CMI码、AMI码、HDB3码。 参数…

Spring中Bean的生命周期

先直接说出过程&#xff0c;再来演示具体的操作 过程 简化来说就是 1、首先是实例化Bean&#xff0c;当客户向容器请求一个尚未初始化的bean时&#xff0c;或初始化bean的时候需要注入另一个尚末初始化的依赖时&#xff0c;容器就会调用doCreateBean()方法进行实例化&#xf…

Java多线程之:队列同步器AbstractQueuedSynchronizer原理剖析

Java多线程之&#xff1a;队列同步器AbstractQueuedSynchronizer原理剖析 文章目录Java多线程之&#xff1a;队列同步器AbstractQueuedSynchronizer原理剖析一、AQS的核心思想二、AQS中关键的内部结构一、Node内部类二、CLH队列三、同步状态 state四、Condition条件队列三、AQS…