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.pswp.cn/news/697574.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697574.shtml
英文地址,請注明出處:http://en.pswp.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…