Dante OSS 是一款簡化Minio 操作的開源框架。通過對原有Minio Java SDK 的深度封裝,簡化Minio API 使用複雜度,提升Minio 使用的便捷性,降低Minio 應用開發門檻。
MinIO 是一款高性能、分佈式的對象存儲系統。 Minio 這款開源的分佈式對象存儲服務在國外已經相當受歡迎,並且國內也有多中小型互聯網公司使用它來作為對象存儲服務。雖然Minio 相關的資料和示例在網絡上已經非常豐富,但是為什麼還要推出Dante OSS 這樣的項目?
- 初次接觸Minio,特別是想要通過Java 集成Minio 開發對象存儲應用是,還是需要投入一定的時間和精力去了解其原理閱讀相關文檔。
- Minio SDK 中的函數方法,涉及的參數較多,抽象層度比較高,每次使用都需要反複查閱源代碼才能摸清具體使用方式。
- 想要與已有的應用進行整合,多少都要投入時間精力,進行一定程度的封裝和改造。
- 網上相關資料多,要么比較零散不成體系,要么比較單一僅針對常規上傳下載應用,Minio 自身很多特性都不涉及。
優點| Advantages
- 零額外學習成本: 開發者只要會Spring 和REST 基本開發,即可無縫集成和使用Dante OSS
- 降低開發者門檻: 屏蔽Minio 標準Java SDK 使用複雜度,使用Spring 環境標準方式對原有API 進行簡化封裝。 Service API 和REST API 開箱即用
- 包含的功能豐富: 改造了Minio Java SDK 的幾乎全部功能,且對大文件分片上傳、秒傳、直傳、斷點續傳等功能,均採用業內最優解決方案進行實現和融合
- 規範優雅的代碼: 所有函數參數,並未破壞原有Minio 代碼構造器結構,而是在原有方式的基礎上抽像簡化,編程體驗和代碼可讀性大幅提升
- 完善的註釋文檔: 對請求參數、方法、REST API、Validation 提供詳實的註釋、說明和OpenAPI 標註,用途用法一目了然,無需再翻閱Minio 文檔和源代碼,幫助您節省更多時間
- 完整的前端示例:前端採用一個完整的項目而非Demo 的形式,全面的展示了前後端交互涉及、接口調用、參數使用、TS 類型定義等各方面內容,可直接用於實際項目或簡單改造後構建自己的產品
對比| Compare
1. 不只是簡單的Spring Boot Starter 構建
- 構建統一的錯誤,可以返回更人性化、更易理解的錯誤信息,同時兼顧更詳細錯誤信息的返回,方便開發人員理解和定位問題。
- 採用更易理解和使用的格式對Minio Java SDK 參數進行重新定義。規避Minio 默認XML 方式參數多、不易理解使用、與前端交互不方便等問題。
- 隱藏Minio Java SDK 不易理解和使用的細節,提供詳實的註釋說明,開發人員在使用時無需再通過翻閱Minio 在線文檔和源代碼來了解各個API 使用細節。
- 提供統一標準的REST API,以及OpenAPI Swagger3 文檔描述和準確的Spring Validation 校驗,可直接集成至系統中使用。
- Minio Client 對像池、自定義極簡Minio Server 訪問反向代理,提升
2. 標準化業務邏輯和解決方案集合
- 不只是上傳、下載等常用方法的封裝,涵蓋Minio Java SDK 支持的所有方法和操作。
- 選擇業內最優的解決方案,實現和集成大文件分片上傳、秒傳、直傳、斷點續傳等主要業務需求功能。
- 結合自身應用經驗和需求,將Minio API 進一步組合成符合實際應用的業務邏輯和功能處理。
- 採用一個基於Vue3、Typescript5、Vite4、Pinia 2 的完整的前端項目作為集成示例,包括詳細的Typescript 類型定義以及vue-simple-uploader 等主流組件集成和使用方法。
- 提供基於Spring Authorization Server 的單體版、微服務版案例,從SDK、Spring Boot Starter 到完整項目任你選擇。
結構| Structure
dante-oss
├── oss-bom -- 工程Maven顶级依赖,统一控制版本和依赖
├── oss-minio -- Minio 模组
├ ├── minio-core -- Minio 通用代码包
├ ├── minio-sdk-api -- Minio 基础API封装模块
├ ├── minio-sdk-logic -- 基于Minio扩展应用模块
├ ├── minio-sdk-rest -- 基于Minio扩展的REST接口模块
└── └── minio-spring-boot-starter -- Minio Starter
功能| function
功能 | 說明 |
---|---|
Bucket 列表 | Bucket 列表查詢,包括Service、REST API 和前端展示 |
Bucket 名稱是否存在 | Bucket 名是否存在,包括Service、REST API 和前端異步校驗處理 |
Bucket 創建 | 創建Bucket,包括Service、REST API 和前端Validation 校驗處理 |
Bucket 刪除 | 刪除Bucket,包括Service、REST API 和前端展示處理 |
Bucket 加密設置獲取 | 獲取Bucket Encryption 設置,包括Service、REST API |
Bucket 修改加密設置 | 修改Bucket Encryption 設置,包括Service、REST API |
Bucket 刪除加密設置 | 刪除Bucket Encryption 設置,包括Service、REST API |
Bucket 訪問策略設置獲取 | 獲取Bucket Policy 設置,包括Service、REST API |
Bucket 修改訪問策略設置 | 修改Bucket Policy 設置,包括Service、REST API |
Bucket 刪除訪問策略設置 | 刪除Bucket Policy 設置,包括Service、REST API |
Bucket 標籤獲取 | 獲取Bucket Tags,包括Service、REST API |
Bucket 修改標籤 | 修改Bucket Tags,包括Service、REST API |
Bucket 刪除標籤 | 刪除Bucket Tags,包括Service、REST API |
Bucket 對象鎖定設置獲取 | 獲取Bucket ObjectLockConfiguration 設置,包括Service、REST API |
Bucket 修改對象鎖定設置 | 修改Bucket ObjectLockConfiguration 設置,包括Service、REST API |
Bucket 刪除對象鎖定設置 | 刪除Bucket ObjectLockConfiguration 設置,包括Service、REST API |
Object 列表 | Object 列表查詢,包括Service、REST API 和前端展示 |
Object 刪除 | 刪除Object,包括Service、REST API 和前端展示處理 |
Object 批量刪除 | 批量刪除Object,包括Service、REST API 和前端展示處理 |
Object 元信息獲取 | 獲取Object Stat,包括Service、 |
Object 下載(服務端) | Object 下載(服務端下載,非流模式),包括Service、 |
其它功能 | 正逐步完善,主要涉及前後端交互、以及可用性驗證和前端相關功能的開發,敬請期待,歡迎PR |
功能 | 說明 |
---|---|
創建分片上傳請求 | 創建分片上傳請求,返回Minio UploadId |
創建文件預上傳地址 | 根據UploadId 和指定的分片數量,返回數量像匹配的Minio 與上傳地址 |
獲取所有分片文件 | 獲取指定uploadId 下所有的分片文件 |
創建大文件分片上傳 | 統一的創建大文件分片上傳業務邏輯封裝,減少前後端反復交互, 包括Service、REST API |
合併已經上傳完成的分片 | 根據UploadId 合併已經上傳完成的分片,完成大文件分片上傳包括Service、REST API |
統一常量接口 | 將涉及的Enums、常量以統一接口的方式返回給前端,方便展示使用, 包括Service、REST API 和前端展示 |
Minio Client 對像池 | 實現Minio Client 對像池,減少Minio Client 的反复創建和銷毀,提升訪問Minio Server 机能 |
Bucket 設置 | 統一Bucket 設置: Bucket 標籤設置、訪問策略、加密方式、對象鎖定等, 包括Service、REST API 和前端展示 |
Object 下載(流模式) | Minio 對像下載,採用流模式支持vue 前端post 方式下載, 包括Service、REST API 和前端展示 |
超輕量級反向代理 | 實現輕量級反向代理解決PresignedObjectUrl 方式直接向前端暴露Minio Server 地址問題 |
功能 | 說明 |
---|---|
OpenAPI 支持 | 在支持Open API 環境下,顯示Swagger 文檔,建議使用Springdoc |
與Spring Authorization Server 體系集成 | 提供完整的與Spring Authorization Server 集成,實現認證、授權、鑑權、動態權限等完整案例,包括單體版和微服務版 |
大文件分片上傳 | 採用PresignedObjectUrl 方案的大文件分片上傳。擴展Minio Client,封裝相應的Service、REST API |
vue-simple-uploader | 前端基於vue-simple-uploader 組件,配合自定義REST API 實現大文件分片上傳 |
使用| How to use
- maven 中引入
<dependency>
<groupId>cn.herodotus.oss</groupId>
<artifactId>minio-spring-boot-starter</artifactId>
<version>最新版本</version>
</dependency>
- 配置yml 參數
herodotus:
oss:
minio:
endpoint: http://127.0.0.1:9000
access-key: xxxxxx
secret-key: xxxxxx
- 統一錯誤處理
// 参考代码
public static Result<String> resolveException(Exception ex, String path) {
return GlobalExceptionHandler.resolveException(ex, path);
}
// 或者
@ExceptionHandler({HerodotusException.class, PlatformException.class})
public static Result<String> exception(Exception ex, HttpServletRequest request, HttpServletResponse response) {
······
}
貢獻| Committer
- 在Gitee fork 項目到自己的repo
- 把fork 過去的項目也就是你的項目clone 到你的本地
- 修改代碼(記得一定要修改develop 分支)
- commit 程式碼,push 到自己的庫(develop 分支)
- 登錄Gitee 在你首頁可以看到一個pull request 按鈕,點擊它,填寫一些說明信息,然後提交即可。
- 等待維護者合併
反饋| Feedback
- 歡迎提交ISSUS ,請寫清楚問題的具體原因,重現步驟和環境
#Dante #OSS首頁文檔和下載 #簡化Minio #操作 #程式开发