SpringBoot快速整合Thymeleaf实现文件上传案例

SpringBoot快速整合Thymeleaf实现文件上传案例

文章目录

  • SpringBoot快速整合Thymeleaf实现文件上传案例
  • 1. 创建工程
  • 2. pom.xml文件
  • 2. application.yml 配置
  • 3. 前端fileupload.html
  • 4. 后端Controller

本案例环境:

  1. SpringBoot: 2.3.0.RELEASE
  2. JDK: 1.8
  3. 前端模板: thymeleaf

1. 创建工程

  1. 在IDEA中通过SpringBoot初始化向导创建一个工程,如取名为yuan-fileupload
  2. 创建完工程后按下面的步骤进行配置即可完成文件上传功能。

2. pom.xml文件

pom.xml文件上引入相关依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.yuan</groupId><artifactId>yuan-fileupload</artifactId><version>0.0.1-SNAPSHOT</version><name>yuan-fileupload</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2. application.yml 配置

server:port: 8085
spring:servlet:multipart:max-file-size: 1GB # 用于设置上传文件的最大大小,默认值为1MB。如果上传的文件大小超过这个限制,则会导致上传失败max-request-size: 2GB # 参数用于设置整个请求的最大大小,包括所有文件和表单数据,默认值为10MB。如果请求大小超过这个限制,Spring Boot 将拒绝接收请求,并返回一个异常

3. 前端fileupload.html

通过thymeleaf进行进行文件上传,前端fileupload.html页面内容如下:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>文件上传案例</title>
</head>
<body><form method="post" enctype="multipart/form-data" th:action="${#httpServletRequest.getContextPath()}+'/fileUpload'">文件1: <input type="file" name="files"><br>文件2: <input type="file" name="files"><br><input type="submit" value="上传">
</form>
</body>
</html>

4. 后端Controller

FileUploadController.Java如下,支持多文件上传

package org.yuan.yuanfileupload.fileupload;import org.apache.commons.io.FilenameUtils;
import org.springframework.stereotype.Controller;
import org.springframework.util.ResourceUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.yuan.yuanfileupload.utils.ResultMsg;import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;/*** <p>* Description: 文件上传简单案例 <br>* <p>* Author:jinshengyuan <br>* Datetime: 2020/5/24 14:55* </p>** @since 2020/5/24 14:55*/
@Controller
public class FileUploadController {/*** <p>* Description: 跳转至文件上传页面的handler <br>* <p>* Author:jinshengyuan <br>* Datetime: 2020/5/24 14:56* </p>** @return 跳转的模板名称* @since 2020/5/24 14:56*/@RequestMapping("/initUpload")public String initUpload() {return "fileUpload";}/*** <p>* Description: 文件上传方法<br>* <p>* Author:jinshengyuan <br>* Datetime: 2020/5/24 14:57* </p>** @return 返回上传后的处理结果* @since 2020/5/24 14:57*/@ResponseBody@RequestMapping("/fileUpload")public ResultMsg fileUpload(MultipartFile[] files, HttpServletRequest request) throws Exception {for (MultipartFile file : files) {String contentType = file.getContentType();String originalFilename = file.getOriginalFilename();String name = file.getName();System.out.println("contentType:" + contentType);System.out.println("originalFilename:" + originalFilename);System.out.println("name:" + name);//文件名不为空则上传if (!StringUtils.isEmpty(originalFilename)) {//文件存放位置//1.传统的方式获取服务器跟目录下的fileUpload路径//String realPath = request.getServletContext().getRealPath("/fileUpload");//2.Springboot项目中获取resource/static/fileupload路径String uploadPath = ResourceUtils.getURL("classpath:").getPath() + "static/fileUpload/";System.out.println("uploadPath:" + uploadPath);//文件输出目录是否存在,不存在则创建File dir = new File(uploadPath);if (!dir.exists()) {dir.mkdir();}//文件名前缀 日期+UUIDString fileNamePrefix = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + UUID.randomUUID().toString().replace("-", "");//文件后缀名String fileExtendName = FilenameUtils.getExtension(originalFilename);//输出到指定的位置String outFileName = fileNamePrefix.concat(".").concat(fileExtendName);//文件上传至指定目录file.transferTo(new File(dir, outFileName));} else {//文件名为空,跳出当前循环continue;}}return ResultMsg.success();}
}

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

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

相关文章

【PHP进阶】Redis批处理缓存

大家好&#xff0c;我是程序员若风&#xff0c;又到了技术分享时刻。 概要 在某些场景下&#xff0c;我们需要频繁的使用到缓存&#xff0c;比如需要获取多个key值&#xff0c;如果采用单个拿缓存的办法&#xff0c;会造成网络IO极大的浪费&#xff0c;所以我们需要用户Redis…

Leetcode3036. 匹配模式数组的子数组数目 II

Every day a Leetcode 题目来源&#xff1a;3036. 匹配模式数组的子数组数目 II 解法1&#xff1a;KMP 设数组 nums 的长度为 m&#xff0c;数组 pattern 的长度为 n。 遍历数组 nums 的每个长度是 n1 的子数组并计算子数组的模式&#xff0c;然后与数组 pattern 比较&…

JavaScript 设计模式之观察者模式

观察者模式 观察者模式又被称为发布-订阅模式&#xff0c;使用一个对象来收集订阅者&#xff0c;在发布时遍历所有订阅者&#xff0c;然后将信息传递给订阅者&#xff0c;可以这样来实现一个简单的模式 const Observable (function () {let __messages {}return {register:…

win系统下安装mysql5.7并配置环境变量、设置root用户和服务启动的详细操作教程

本篇文章主要讲解&#xff1a;win系统下安装mysql5.7并配置环境变量、设置root用户和服务启动的详细操作教程 日期&#xff1a;2024年2月22日 作者&#xff1a;任聪聪 一、mysql5.7版本的下载 官方下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 步骤…

服务器生信环境配置脚本

服务器生信环境配置脚本的重要性在于它为生物信息学的数据分析提供了一个统一和标准化的计算环境。通过自动化的配置脚本&#xff0c;可以快速地在服务器上部署和设置生物信息学的软件和依赖库&#xff0c;确保分析的可重复性和准确性。这样&#xff0c;生物信息学家和研究人员…

【鸿蒙 HarmonyOS 4.0】状态管理

一、介绍 资料来自官网&#xff1a;文档中心 在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&#xff0c;用户构建了一个UI模型&#xff0c;其中应用的运行时的状态是参数。当参数改变时&#xff0c;UI作为返回结果&#xff0c;也将进行对应的改变。这些运行时的状…

Stable Diffusion 模型的概念、类型、下载、安装、使用

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 大家好&#xff0c;我是水滴~~ 我们在《Stable Diffusion WebUI 界面介绍》 时&#xff0c;第一个就讲到了 Stable Diffusion 模型&#xff0c;那么这个模型是什么&#xff1f;该从哪儿下载&…

多输入分类|GWO-CNN-LSTM|灰狼算法优化的卷积-长短期神经网络分类预测(Matlab)

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 灰狼优化算法&#xff1a; 卷积神经网络-长短期记忆网络&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容…

【EI会议征稿通知】第五届人工智能与机电自动化国际学术会议(AIEA 2024)

第五届人工智能与机电自动化国际学术会议&#xff08;AIEA 2024&#xff09; 2024 5th International Conference on Artificial Intelligence and Electromechanical Automation 优秀评选已启动&#xff0c;设置优秀论文、优秀报告及优秀海报多个奖项&#xff0c;丰厚奖金等…

【Java程序设计】【C00280】基于Springboot的校友社交系统(有论文)

基于Springboot的校友社交系统&#xff08;有论文&#xff09; 项目简介项目简介项目获取开发环境项目技术运行截图 项目简介 项目简介 这是一个基于Springboot的校友社交系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xff1a;在系统首页…

数据结构与算法——排序算法

目录 文章目录 前言 一.排序的基本概念 1.什么是就地排序 2.什么是内部排序和外部排序 3.什么是稳定排序 4.判定一个排序算法的是稳定的 二.插入排序算法 1.直接插入排序 1.1基本思想 1.2复杂度 1.3稳定性 1.4代码演示 2.折半插入排序 2.1基本思想 2.2性能 3.…

vue实现递归组件

父组件&#xff1a; <Tree :data"data"></Tree> import Tree from "/components/Tree.vue"; const data reactive([{name: "1",checked: true,children: [{name: "1-1",checked: false,},],},&#xff09; 子组件&#…

若依logback日志配置采坑

问题描述 若依使用的appender过滤器是level&#xff0c;如下述代码&#xff0c;这种过滤器只能导出级别为INFO的日志&#xff0c;warn和error都导出不出来。查询不是很方便。 <!-- 系统日志输出 --><appender name"file_info" class"ch.qos.logback.…

JAVA IDEA 项目打包为 jar 包详解

前言 如下简单 maven 项目&#xff0c;现在 maven 项目比较流行&#xff0c;你还没用过就OUT了。需要打包jar 先设置&#xff1a;点击 File > Project Structure > Artifacts > 点击加号 > 选择JAR > 选择From modules with dependencies 一、将所有依赖和模…

VirtualBox+Vagrant快速搭建Centos7

目录 安装VirtualBox&#xff1a; 安装Vagrant&#xff1a; 创建Vagrant项目目录&#xff1a; 初始化Vagrant配置文件&#xff1a; 本地Vagrantfile中的镜像名称&#xff1a; 启动虚拟机&#xff1a; SSH登录虚拟机&#xff1a; 备注&#xff1a;安装镜像的另一种方式是…

springmvc+ssm+springboot房屋中介服务平台的设计与实现 i174z

本论文拟采用计算机技术设计并开发的房屋中介服务平台&#xff0c;主要是为用户提供服务。使得用户可以在系统上查看房屋出租、房屋出售、房屋求购、房屋求租&#xff0c;管理员对信息进行统一管理&#xff0c;与此同时可以筛选出符合的信息&#xff0c;给笔者提供更符合实际的…

Autodesk CAD如何建立图层方框?

在AutoCAD中&#xff0c;要建立图层方框&#xff08;Layer Box&#xff09;可以通过以下步骤实现&#xff1a; 打开图层管理器&#xff1a; 在 AutoCAD 中&#xff0c;您可以通过输入“LA”命令或在菜单栏中选择“格式” > “图层管理器”来打开图层管理器对话框。 创建新图…

记阿里云mysql丢表丢数据的实践记录

第一时间挂工单&#xff0c;联系工程师指引&#xff0c;现在回过来想&#xff0c;第一时间要确认发生时间。 1.通过性能视图&#xff08;马后炮的总结&#xff0c;实际凭记忆恢复了三四次才找到数据&#xff09; 2.先恢复数据 通过Navicat工具&#xff0c;结构同步&#xff0…

解决IntelliJ IDEA 2023版本创建Spring项目时Java只能选择17或21的问题

问题描述&#xff1a; 当使用IntelliJ IDEA2023版本中Spring Initializr新建Spring项目时&#xff0c;即使JDK配置项为1.8&#xff0c;Java配置项仍然只能选17或21. 在JDK为1.8版本情况下&#xff0c;Java选择17或21&#xff0c;点击NEXT按钮&#xff0c;则会弹窗提示SDK不支持…

Sora: 开启AI视频创作的新纪元

随着人工智能技术的飞速进步&#xff0c;AI视频模型已迅速成为科技界的新焦点。在这股创新浪潮中&#xff0c;OpenAI推出的Sora&#xff0c;不仅以其前所未有的性能吸引了全球的目光&#xff0c;更以前瞻性的技术定义了AI视频领域的未来。Sora不仅是一个里程碑式的产品&#xf…