欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot實現本地存儲文件上傳及提供HTTP訪問服務的方法

 更新時間:2020年08月11日 11:17:46   作者:字母哥博客  
這篇文章主要介紹了SpringBoot實現本地存儲文件上傳及提供HTTP訪問服務,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

筆者計劃為大家介紹分布式文件系統(tǒng),用于存儲應用的圖片、word、excel、pdf等文件。在開始介紹分布式文件系統(tǒng)之前,為大家介紹一下使用本機存儲來存放文件資源。
二者的核心實現過程是一樣的:

  • 上傳文件,保存文件(本節(jié)是本地磁盤)
  • 返回文件HTTP訪問服務路徑給前端,進行上傳之后的效果展示

一、復習

服務端接收上傳的目的是提供文件的訪問服務,那么對于SpringBoot而言,有哪些可以提供文件訪問的靜態(tài)資源目錄呢?

  • classpath:/META-INF/resources/ ,
  • classpath:/static/ ,
  • classpath:/public/ ,
  • classpath:/resources/

這是之前我們?yōu)榇蠹医榻B的內容,從這里看出這里的靜態(tài)資源都在classpath下。那么就出現問題:

  • 應用的文件資源不能和項目代碼分開存儲(你見過往github上傳代碼,還附帶項目文件數據的么?)
  • 項目打包困難,當上傳的文件越來越多,項目的打包jar越來越大。
  • 代碼與文件數據不能分開存儲,就意味著文件數據的備份將變得復雜

二、文件上傳目錄自定義配置

怎么解決上述問題?別忘記了spring boot 為我們提供了使用spring.resources.static-locations配置自定義靜態(tài)文件的位置。

web:
 upload-path: D:/data/

spring:
 resources:
 static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${web.upload-path}
  • 配置web.upload-path為與項目代碼分離的靜態(tài)資源路徑,即:文件上傳保存根路徑
  • 配置spring.resources.static-locations,除了帶上Spring Boot默認的靜態(tài)資源路徑之外,加上file:${web.upload-path}指向外部的文件資源上傳路徑。該路徑下的靜態(tài)資源可以直接對外提供HTTP訪問服務。

三、文件上傳的Controller實現

詳情看代碼注釋

@RestController
public class FileUploadController {

 //綁定文件上傳路徑到uploadPath
 @Value("${web.upload-path}")
 private String uploadPath;
 
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd/");
 
 @PostMapping("/upload")
 public String upload(MultipartFile uploadFile,
    HttpServletRequest request) {

 // 在 uploadPath 文件夾中通過日期對上傳的文件歸類保存
 // 比如:/2019/06/06/cf13891e-4b95-4000-81eb-b6d70ae44930.png
 String format = sdf.format(new Date());
 File folder = new File(uploadPath + format);
 if (!folder.isDirectory()) {
  folder.mkdirs();
 }
 
 // 對上傳的文件重命名,避免文件重名
 String oldName = uploadFile.getOriginalFilename();
 String newName = UUID.randomUUID().toString()
  + oldName.substring(oldName.lastIndexOf("."), oldName.length());
 try {
  // 文件保存
  uploadFile.transferTo(new File(folder, newName));
 
  // 返回上傳文件的訪問路徑
  String filePath = request.getScheme() + "://" + request.getServerName()
   + ":" + request.getServerPort() + format + newName;
  return filePath;
 } catch (IOException e) {
  throw new CustomException(CustomExceptionType.SYSTEM_ERROR);
 }

 }
}

四、寫一個模擬的文件上傳頁面,進行測試

把該upload.html文件放到classpath:public目錄下,對外提供訪問。

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
 <input type="file" name="uploadFile" value="請選擇上傳文件">
 <input type="submit" value="保存">
</form>
</body>
</html>

訪問測試、點擊“選擇文件”,之后保存

文件被保存到服務端的web.upload-path指定的資源目錄下

瀏覽器端響應結果如下,返回一個文件HTTP訪問路徑:

使用該HTTP訪問路徑,在瀏覽器端訪問效果如下。證明我們的文件已經成功上傳到服務端,以后需要訪問該圖片就通過這個HTTP URL就可以了。

到此這篇關于SpringBoot實現本地存儲文件上傳及提供HTTP訪問服務的文章就介紹到這了,更多相關SpringBoot實現文件上傳和訪問內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MyBatis中XML 映射文件中常見的標簽說明

    MyBatis中XML 映射文件中常見的標簽說明

    這篇文章主要介紹了MyBatis中XML 映射文件中常見的標簽說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 一篇文章帶你了解Java基礎-抽象

    一篇文章帶你了解Java基礎-抽象

    這篇文章主要給大家介紹了關于Java抽象定義以及舉例的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • MyBatis使用動態(tài)表或列代碼解析

    MyBatis使用動態(tài)表或列代碼解析

    這篇文章主要介紹了MyBatis使用動態(tài)表或列代碼解析,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • SpringCloud微服務熔斷器Hystrix使用詳解

    SpringCloud微服務熔斷器Hystrix使用詳解

    這篇文章主要介紹了Spring Cloud Hyxtrix的基本使用,它是Spring Cloud中集成的一個組件,在整個生態(tài)中主要為我們提供服務隔離,服務熔斷,服務降級功能,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • JavaCV調用百度AI實現人臉檢測方法詳解

    JavaCV調用百度AI實現人臉檢測方法詳解

    在檢測人臉數量、位置、性別、口罩等場景時,可以考慮使用百度開放平臺提供的web接口,一個web請求就能完成檢測得到結果。本文就為大家介紹JavaCV如何調用百度AI實現最簡單的人臉檢測,需要的可以參考一下
    2022-01-01
  • 每日幾道java新手入門面試題,通往自由的道路

    每日幾道java新手入門面試題,通往自由的道路

    這篇文章主要為大家分享了最有價值的是幾道java面試題,涵蓋內容全面,包括數據結構和算法相關的題目、經典面試編程題等,對hashCode方法的設計、垃圾收集的堆和代進行剖析,感興趣的小伙伴們可以參考一下
    2021-07-07
  • SpringBoot參數校驗之@Valid的使用詳解

    SpringBoot參數校驗之@Valid的使用詳解

    這篇文章主要通過示例為大家詳細介紹一下介紹了SpringBoot參數校驗中@Valid的使用方法,文中的示例代碼講解詳細,需要的可以參考一下
    2022-06-06
  • Spring整合Mybatis方式之注冊映射器

    Spring整合Mybatis方式之注冊映射器

    這篇文章主要介紹了Spring整合Mybatis方式之注冊映射器,MapperFactoryBean注冊映射器的最大問題,就是需要一個個注冊所有的映射器,而實際上mybatis-spring提供了掃描包下所有映射器接口的方法,每種方式給大家介紹的非常詳細,需要的朋友參考下吧
    2024-03-03
  • Java虛擬機處理異常的最佳方式

    Java虛擬機處理異常的最佳方式

    這篇文章主要給大家介紹了關于Java虛擬機處理異常的最佳方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • java實現字符串的全排列

    java實現字符串的全排列

    這篇文章主要為大家詳細介紹了java實現字符串的全排列,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02

最新評論