SpringBoot上傳文件并配置本地資源映射來訪問文件的實(shí)例代碼
1.準(zhǔn)備工作
1、新建一個(gè)SpringBoot項(xiàng)目加上web依賴, 所有依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
2、application.properties
# 上傳文件總的最大值 spring.servlet.multipart.max-request-size=10MB #spring.servlet.multipart.max-request-size=10KB # 單個(gè)文件的最大值 spring.servlet.multipart.max-file-size=10MB #spring.servlet.multipart.max-file-size=10KB # 文件上傳路徑, 當(dāng)前項(xiàng)目根目錄下的 uploadFile 目錄 pro.uploadPath=uploadFile
3、新建文件上傳的靜態(tài)文件 index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上傳</title> </head> <body> <h1>文件上傳</h1> <form method="post" action="/file/upload" enctype="multipart/form-data"> <input type="file" name="file"><br> <input type="submit" value="提交"> </form> </body> </html>
2. 配置本地資源映射路徑 addResourceHandlers
package com.pro.conf; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebMvcConf implements WebMvcConfigurer { @Value("${pro.uploadPath}") private String uploadPath; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler(uploadPath + "/**") // 添加訪問路徑 // file: 當(dāng)前項(xiàng)目根目錄, 映射到真實(shí)的路徑下的 uploadPath(變量)目錄下 .addResourceLocations("file:" + uploadPath + "/"); } }
3.上傳代碼
package com.pro.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.ResourceUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; import java.io.*; import java.text.SimpleDateFormat; import java.util.*; @RestController public class UploadController { @Value("${pro.uploadPath}") private String uploadPath; /** * 獲取文件路徑 * @param request 請(qǐng)求體 * @param fileName 文件名稱 * @return 文件路徑 */ public String getUploadPath(HttpServletRequest request, String fileName) { return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/" + uploadPath + "/" + fileName; } // 文件上傳, 上傳到當(dāng)前項(xiàng)目根目錄下的 uploadFile 目錄 @RequestMapping("/file/upload") public Object upload(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request) { Map<String, Object> map = new HashMap(); map.put("msg", "上傳成功"); if (multipartFile.isEmpty()) { map.put("msg", "空文件"); return map; } // 獲取文件名 String fileName = multipartFile.getOriginalFilename(); if ("".equals(fileName)) { map.put("msg", "文件名不能為空"); return map; } System.out.println("上傳文件原始的名字: " + fileName); // 使用uuid生成新文件名 String newFileName = UUID.randomUUID().toString().replaceAll("-", "") + fileName.substring(fileName.lastIndexOf("."), fileName.length()); System.out.println("保存的文件的新名字: " + newFileName); // 獲取年月日的日期格式 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String format = simpleDateFormat.format(new Date()); // 生成以日期分割的文件路徑 File readPath = new File(uploadPath + File.separator + format); System.out.println("存放的文件夾: " + readPath); System.out.println("存放文件的絕對(duì)路徑: " + readPath.getAbsolutePath()); // 判斷文件夾是否存在 if (!readPath.isDirectory()) { // 創(chuàng)建文件夾 readPath.mkdirs(); } // 文件真實(shí)的保存路徑 File file = new File(readPath.getAbsolutePath() + File.separator + newFileName); try { multipartFile.transferTo(file); // 獲取存儲(chǔ)路徑 String filePath = getUploadPath(request, format + "/" + newFileName); map.put("path", filePath); } catch (IOException e) { e.printStackTrace(); map.put("msg", "上傳失敗"); } return map; } }
到此這篇關(guān)于SpringBoot上傳文件并配置本地資源映射來訪問文件的文章就介紹到這了,更多相關(guān)SpringBoot上傳文件資源映射內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 最重要布局管理器GridBagLayout的使用方法
GridBagLayout是java里面最重要的布局管理器之一,可以做出很復(fù)雜的布局,可以說GridBagLayout是必須要學(xué)好的的,需要的朋友可以了解下2012-12-12Spring中的攔截器HandlerInterceptor詳細(xì)解析
這篇文章主要介紹了Spring中的攔截器HandlerInterceptor詳細(xì)解析,HandlerInterceptor 是 Spring 框架提供的一個(gè)攔截器接口,用于在請(qǐng)求處理過程中攔截和處理請(qǐng)求,需要的朋友可以參考下2024-01-01spring boot--從controller到DAO操作
這篇文章主要介紹了spring boot--從controller到DAO操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Java 并發(fā)編程之ThreadLocal詳解及實(shí)例
這篇文章主要介紹了Java 并發(fā)編程之ThreadLocal詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-02-02Spring?Security自定義認(rèn)證邏輯實(shí)例詳解
這篇文章主要給大家介紹了關(guān)于Spring?Security自定義認(rèn)證邏輯的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01Java實(shí)現(xiàn)幾十萬條數(shù)據(jù)插入實(shí)例教程(30萬條數(shù)據(jù)插入MySQL僅需13秒)
這篇文章主要給大家介紹了關(guān)于Java如何實(shí)現(xiàn)幾十萬條數(shù)據(jù)插入的相關(guān)資料,30萬條數(shù)據(jù)插入MySQL僅需13秒,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-04-04Spring?Security前后分離校驗(yàn)token的實(shí)現(xiàn)方法
這篇文章主要介紹了Spring?Security前后分離校驗(yàn)token的方法,本次token生成采取jwt的方式,通過引入jwt依賴文件配置token管理器,對(duì)Spring?Security校驗(yàn)token相關(guān)知識(shí)感興趣的朋友一起看看吧2022-02-02spring boot security設(shè)置忽略地址不生效的解決
這篇文章主要介紹了spring boot security設(shè)置忽略地址不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07