一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBoot實現本地存儲文件上傳及提供HTTP訪問服務的方法

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

2020-08-11 18:15字母哥博客 Java教程

這篇文章主要介紹了SpringBoot實現本地存儲文件上傳及提供HTTP訪問服務,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

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

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

一、復習

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

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

這是之前我們為大家介紹的內容,從這里看出這里的靜態資源都在classpath下。那么就出現問題:

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

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

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

?
1
2
3
4
5
6
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為與項目代碼分離的靜態資源路徑,即:文件上傳保存根路徑
  • 配置spring.resources.static-locations,除了帶上Spring Boot默認的靜態資源路徑之外,加上file:${web.upload-path}指向外部的文件資源上傳路徑。該路徑下的靜態資源可以直接對外提供HTTP訪問服務。

三、文件上傳的Controller實現

詳情看代碼注釋

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@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目錄下,對外提供訪問。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<!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>

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

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

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

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

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

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

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

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

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

原文鏈接:https://www.cnblogs.com/zimug/archive/2020/08/11/13474233.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美大陆日韩一区二区三区 | 欧美区一区| 亚洲乱亚洲乱妇41p国产成人 | 国产精品视频二区不卡 | 亚洲七七久久综合桃花 | 天天色色色 | 高清不卡日本v在线二区 | 日本无卡无吗中文免费 | 欧美老少| 国产第一页在线视频 | 久久99亚洲热最新地址获取 | 国产麻豆在线观看网站 | 干妞网免费视频 | 好大夫在线个人空间 | 免费理伦片手机在线播放 | 免费xxxxx大片在线观看影视 | 免费刷10000名片赞网站 | 拔插拔插8x8x海外华人免费视频 | 日本一区三区 | 免费观看日本视频 | 成人欧美一区二区三区黑人 | 国产午夜一区二区在线观看 | yy111111影院理论大片 | 欧美巨吊| 天堂伊人网 | 91视频破解版 | 国产精品九九免费视频 | 国产成人免费在线视频 | 被黑人同学彻底征服全文小说阅读 | 三级午夜宅宅伦不卡在线 | 国产精品一区二区三区免费 | 日本黄a | 青青青青青操 | 骚虎网站在线观看 | 很很草 | 91传媒制片厂果冻有限公司 | 欧美又大又粗又长又硬 | 韩国理论片最新第一页 | 放荡警察巨r麻麻出轨小说 范冰冰特黄xx大片 饭冈加奈子在线播放观看 法国老妇性xx在线播放 | 我的妹妹最近有点怪免费播放 | 调教催眠改造np总攻 |