武培軒
推薦搜尋
Spring BootJava資料結構MySQLRedisElasticsearch
最近因為項目中需要存儲很多的圖檔,不想存儲到伺服器上,是以就直接選用阿裡雲的對象服務(Object Storage Service,簡稱 OSS)來進行存儲,本文将介紹 Spring Boot 內建 OSS 的一個完整過程。
那麼 OSS 是什麼呢?
簡而言之,OSS 是一種海量、安全、低成本、高可靠的雲存儲服務。
關于 OSS 的知識就不再這裡贅述了,大家可以自行學習下。
首先需要在阿裡雲控制台開通 OSS,然後需要建立存儲空間(Bucket),我這裡命名為 wupx-img。
建立 Bucket
如果之前沒有建立過 AccessKey,滑鼠移到右上角的賬号後點選 AccessKey 管理,然後建立就可以了。
或者直接輸入 https://ak-console.aliyun.com/#/ 來進行密鑰的建立和檢視。
AccessKey 管理
準備工作做好後,就開始進行項目實戰吧!
Spring Boot 內建 OSS 主要分為以下三步:
加入 OSS 依賴
配置 OSS
示範 OSS 基本操作
加入依賴
首先建立一個 Spring Boot 項目,然後在 pom.xml 加入如下依賴內建 OSS:
建立 OSS 配置
在配置檔案 application.properties 中配置 OSS 的相關參數,具體内容如下:
其中指定了 OSS 的通路域名、密鑰以及存儲空間 Bucket 的名稱等。
然後在 config 包下建立 OSSConfiguration 類,會從配置檔案中讀取到對應的參數,并且把 ossClient 單例化。
服務類
在這裡主要介紹 OSS 的上傳、下載下傳、删除、檢視 URL 等簡單操作,在 service 包下建立 OSSService 類,然後注入 ossClient 和 ossConfiguration。
上傳檔案
首先來看下如何上傳檔案,首先通過 UUID 生成檔案名,防止重複,再建立一個 ObjectMetadata,可以設定使用者自定義的中繼資料以及 HTTP 頭,比如内容長度,ETag 等,最後通過調用 ossClient 的 putObject 方法來完成檔案上傳,并傳回檔案名,具體代碼如下所示:
編寫對應的 Controller 層,調用上傳檔案接口後,在檔案管理中可以看到檔案已經上傳成功了:
擷取檔案清單
可以通過 ListObjectsRequest 建構請求參數,比如設定 Bucket 名稱和列舉檔案的最大個數,然後調用 ossClient 的 listObjects 方法就可以擷取到 objectListing,再擷取檔案的元資訊,最後将檔案名稱傳回,具體代碼如下:
判斷檔案是否存在
判斷檔案是否存在,直接通過 ossClient 的 doesObjectExist 方法就可以進行判斷,傳入的參數為 Bucket 名稱和檔案名稱,具體代碼如下:
下載下傳檔案
下載下傳存儲在 OSS 的檔案,首先需要傳入 Bucket 名稱和檔案名稱調用 ossClient 的 getObject 方法擷取 ossObject,ossObject 包含檔案所在的存儲空間名稱、檔案名稱、檔案元資訊以及一個輸入流,然後調用 ossObject 的 getObjectContent 方法擷取輸入流,然後進行檔案的下載下傳,具體代碼如下:
删除檔案
删除檔案也比較簡單,直接調用 deleteObject 方法,傳入對應的 Bucket 名稱和檔案名稱即可,具體代碼如下:
檢視 URL
擷取檔案的通路位址可以調用 ossClient 的 generatePresignedUrl,在調用的時候還需要設定過期時間,具體代碼如下:
通過調用接口即可傳回檔案對應的 url 位址,我們通過 url 就可以通路圖檔,效果如下:
到此為止,OSS 的基本操作就簡單介紹完了,大家可以多動手試試,不會的可以看下官方的幫助文檔。
跨域規則
阿裡雲 OSS 解決請求跨越問題:進入對應的 Bucket,然後依次點選權限管理->跨越設定->建立規則,然後填寫上對應的規則,具體如下圖所示:
總結
本文的完整代碼在 https://github.com/wupeixuan/SpringBoot-Learn 的 oss 目錄下。
Spring Boot 結合 OSS 還是比較簡單的,大家可以下載下傳項目源碼,自己在本地運作調試這個項目,更好地了解如何在 Spring Boot 中建構基于 OSS 的應用。
留言讨論
最好的關系就是互相成就,大家的點贊、在看、分享、留言就是我創作的最大動力。
參考
https://github.com/wupeixuan/SpringBoot-Learn
https://help.aliyun.com/document_detail/32008.html
完
●Spring Boot 內建 Elasticsearch 實戰
●Spring Boot 內建 WebSocket 實作服務端推送消息到用戶端
●如何優雅地停止 Spring Boot 應用?
有幫助?在看,轉發走一波
喜歡作者