最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot實(shí)現(xiàn)本地存儲文件上傳及提供HTTP訪問服務(wù)的方法

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

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

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

一、復(fù)習(xí)

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

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

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

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

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

怎么解決上述問題?別忘記了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為與項(xiàng)目代碼分離的靜態(tài)資源路徑,即:文件上傳保存根路徑
  • 配置spring.resources.static-locations,除了帶上Spring Boot默認(rèn)的靜態(tài)資源路徑之外,加上file:${web.upload-path}指向外部的文件資源上傳路徑。該路徑下的靜態(tài)資源可以直接對外提供HTTP訪問服務(wù)。

三、文件上傳的Controller實(shí)現(xiàn)

詳情看代碼注釋

@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);
 }

 }
}

四、寫一個模擬的文件上傳頁面,進(jìn)行測試

把該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>

訪問測試、點(diǎn)擊“選擇文件”,之后保存

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

瀏覽器端響應(yīng)結(jié)果如下,返回一個文件HTTP訪問路徑:

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

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

相關(guān)文章

  • mybatis plus in方法使用詳解

    mybatis plus in方法使用詳解

    這篇文章主要介紹了mybatis plus in方法使用詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 使用Digester解析XML文件的三種方式小結(jié)

    使用Digester解析XML文件的三種方式小結(jié)

    Digester是apache開源項(xiàng)目Commons中的一個子項(xiàng)目,用于解析XML文檔的工具,本文為大家整理了Digester解析XML文件的三種方式,希望對大家有所幫助
    2024-01-01
  • JAVA重復(fù)調(diào)用接口導(dǎo)致數(shù)據(jù)不一致的問題解決

    JAVA重復(fù)調(diào)用接口導(dǎo)致數(shù)據(jù)不一致的問題解決

    在使用JAVA進(jìn)行開發(fā)時,我們經(jīng)常會遇到要調(diào)用接口來獲取數(shù)據(jù)的情況,本文主要介紹了JAVA重復(fù)調(diào)用接口導(dǎo)致數(shù)據(jù)不一致的問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • TransactionSynchronization的invokeAfterCompletion事務(wù)源碼解析

    TransactionSynchronization的invokeAfterCompletion事務(wù)源碼解析

    這篇文章主要為大家介紹了TransactionSynchronization的invokeAfterCompletion事務(wù)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java 多用戶登錄限制的實(shí)現(xiàn)方法

    Java 多用戶登錄限制的實(shí)現(xiàn)方法

    最近沒有事情做,閑的發(fā)呆,于是寫個東東練練手。這篇文章主要介紹了Java 多用戶登錄限制的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • java開發(fā)微信分享接口的步驟

    java開發(fā)微信分享接口的步驟

    這篇文章主要為大家詳細(xì)介紹了java開發(fā)微信分享接口的步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • IDEA SpringBoot:Cannot resolve configuration property配置文件問題

    IDEA SpringBoot:Cannot resolve configuration&

    這篇文章主要介紹了IDEA SpringBoot:Cannot resolve configuration property配置文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • log4j詳細(xì)的常用配置說明介紹

    log4j詳細(xì)的常用配置說明介紹

    下面看我怎么一步步配置到控制臺的,log4j的輸出級別和輸出模式相信都知道的
    2012-11-11
  • 深入了解Java 腳本化api編程

    深入了解Java 腳本化api編程

    Java 腳本 API 是一種獨(dú)立于框架的腳本語言,使用來自于Java代碼的腳本引擎 ??梢允褂肑ava語言編寫定制/可擴(kuò)展的應(yīng)用程序并將自定義腳本語言選擇留給最終用戶 。下面我們來詳細(xì)了解一下吧
    2019-06-06
  • Sping?Security前后端分離兩種實(shí)戰(zhàn)方案

    Sping?Security前后端分離兩種實(shí)戰(zhàn)方案

    這篇文章主要介紹了Sping?Security前后端分離兩種方案,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03

最新評論

富裕县| 沂水县| 大兴区| 乌拉特前旗| 永登县| 兴海县| 三穗县| 渭南市| 延边| 民权县| 京山县| 巨野县| 龙陵县| 祁门县| 台山市| 武强县| 轮台县| 新巴尔虎左旗| 台东市| 嘉禾县| 长海县| 江永县| 墨竹工卡县| 广河县| 莒南县| 通江县| 监利县| 云梦县| 东阳市| 武定县| 略阳县| 灵台县| 珲春市| 崇左市| 平原县| 齐河县| 台南县| 蒲江县| 枣强县| 苏尼特左旗| 海南省|