Dante OSS 0.4.0 发布,一款简化 Minio 操作的开源框架
简介 | Intro
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-logic -- Minio 基础 API 模块 ├ ├── minio-sdk-rest -- Minio 基础 REST API模块 ├ ├── minio-sdk-scenario -- Minio 扩展及应用方案整合模块 ├ └── minio-spring-boot-starter -- 仅包含 Minio 基础 API 和 REST API 的 Starter └── oss-spring-boot-starter -- 完整的、包含所有内容的 Starter
功能 | function
- [1] 基础功能
功能 | 说明 |
---|---|
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、 |
Object 标签获取 | 获取 Object Tags,包括 Service、REST API |
Object 修改标签 | 修改 Object Tags,包括 Service、REST API |
Object 删除标签 | 删除 Object Tags,包括 Service、REST API |
Object 获取保留设置 | 获取 Object Retention,包括 Service、REST API |
Object 修改保留设置 | 修改 Object Retention,包括 Service、REST API |
Object 开启持有设置 | 获取 Object LegalHold,包括 Service、REST API |
Object 关闭持有设置 | 修改 Object LegalHold,包括 Service、REST API |
其它功能 | 正逐步完善,主要涉及前后端交互、以及可用性验证和前端相关功能的开发,敬请期待,欢迎 PR |
- [2] 扩展功能
功能 | 说明 |
---|---|
创建分片上传请求 | 创建分片上传请求,返回 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 设置 | 统一 Object 设置: Bucket 标签设置, 包括 Service、REST API 和前端展示 |
Object 下载(流模式) | Minio 对象下载,采用流模式支持vue前端post方式下载, 包括 Service、REST API 和前端展示 |
超轻量级反向代理 | 实现轻量级反向代理解决 PresignedObjectUrl 方式直接向前端暴露 Minio Server地址问题 |
- [3] 主流方案
功能 | 说明 |
---|---|
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>oss-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) { ······ }
- 交互性错误信息反馈
// 在系统统一错误处,调用以下代码即可返回包含自定义错误码的、更具交互性错误信息。 if (ex instanceof HerodotusException exception) { Result<String> result = exception.getResult(); result.path(path); log.error("[Herodotus] |- Global Exception Handler, Error is : {}", result); return result; }
二、选择使用
除了 minio-core
模块以外,其它所有模块均可以单独使用。可以根据自身需要,仅选择某个模块进行使用。
- minio-sdk-logic: 仅包含对 Minio 基础 API 封装的 Service 代码。使用注解
@EnableHerodotusMinioLogic
可开启相关内容。 - minio-sdk-rest: 包含对 Minio 基于 API 封装的 Service 以及 REST 代码。使用注解
@EnableHerodotusMinioRest
可开启相关内容。 - minio-sdk-scenario: 包含扩展应用以及各OSS常规场景应用, 注意:不包含
minio-sdk-rest
内容。使用注解@EnableHerodotusMinioScenario
可开启相关内容。 - minio-spring-boot-starter: 包含
minio-sdk-logic
和minio-sdk-rest
两部分内容,可直接引入使用。 - oss-spring-boot-starter: 包含所有内容,注意:需要依赖数据库等相关内容。
贡献 | Committer
- 在Gitee fork项目到自己的repo
- 把fork过去的项目也就是你的项目clone到你的本地
- 修改代码(记得一定要修改 develop 分支)
- commit 代码,push 到自己的库(develop分支)
- 登录Gitee 在你首页可以看到一个 pull request 按钮,点击它,填写一些说明信息,然后提交即可。
- 等待维护者合并
反馈 | Feedback
- 欢迎提交ISSUS ,请写清楚问题的具体原因,重现步骤和环境
演示 | Example
Dante OSS 作为 Dante Cloud 生态产品,不在单独提供演示环境和示例,请直接使用 Dante 环境查看效果和了解使用,这样也更贴近实际。
- 微服务演示环境:https://gitee.com/dromara/dante-cloud
- 单体架构演示环境:https://gitee.com/herodotus/dante-cloud-athena
- 前端工程演示:https://gitee.com/herodotus/dante-cloud-ui
注意:如果您仅是想了解基本的使用方式和使用效果,建议使用单体架构演示环境。具体搭建方式参见【在线文档】中,单体版章节。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MariaDB 11.1.1 & 11.0.2 发布
mariadb-11-1-1-11-0-2-released MariaDB 基金会宣布MariaDB 11.1.1(MariaDB 11.1系列的第一个候选版本)和MariaDB 11.0.2(MariaDB 11.0系列的第一个稳定版本)已经发布。这两个版本都是短期版本,在各自的G.A(稳定版)发布后将被维护一年。 具体更新内容包括: v11.1.1 Notable Items transaction_isolation选项现在是一个系统变量,tx_isolation 系统变量已弃用 (MDEV-21921) InnoDB 服务器在 st_join_table::choose_best_splitting 中崩溃 (MDEV-31403) 条件可推入派生并包含外部引用时发生崩溃 (MDEV-31240) InnoDB 在修复MDEV-30671后没有释放 UNDO (MDEV-31234) InnoDB 挂起修复(MDEV-31158、MDEV-31343、MDEV-31350) Innodb_buffer_pool_read_requests未正确更新 (MDEV-31309) ...
- 下一篇
ArangoDB 3.11.1 发布,分布式多模型数据库
ArangoDB 3.11.1 现已发布。ArangoDB 是一个分布式原生的多模型数据库,具有灵活的文档、图形和键值数据模型。使用方便的 SQL 查询语言或 JavaScript 扩展构建高性能应用程序。 具体更新内容如下: SEARCH-480:加速 ArangoSearch 恢复。 SEARCH-476:修复 fst builder 中的错误。 BTS-1325:AQL:修复了多个并行遍历可能出现的死锁。 将 arangosync 更新为 v2.18.0。 将 OpenSSL 更新至 3.0.9。 BTS-1435:修复了无效的 AQL 优化并添加了安全措施。 APM-766,SEARCH-479:减少 ArangoSearch 移除的内存开销。 提高 ArangoSearch GEO_IN_RANGE 函数的精度。 将 ArangoDB Starter 更新为 0.15.8。 OASIS-25262:修复了唯一索引的 INlookup 中的未定义行为,当查找阵列必须在内存中重建时。 无效键现在被报告为批量插入操作的个别错误,而不再中止整个批次。 BTS-1255:修复内存缓存子...
相关文章
文章评论
共有0条评论来说两句吧...