Dante OSS简化 Minio 操作

联合创作 · 2023-10-01 07:20

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 构建

  1. 构建统一的错误,可以返回更人性化、更易理解的错误信息,同时兼顾更详细错误信息的返回,方便开发人员理解和定位问题。
  2. 采用更易理解和使用的格式对 Minio Java SDK 参数进行重新定义。规避 Minio 默认 XML 方式参数多、不易理解使用、与前端交互不方便等问题。
  3. 隐藏 Minio Java SDK 不易理解和使用的细节,提供详实的注释说明,开发人员在使用时无需再通过翻阅 Minio 在线文档和源代码来了解各个 API 使用细节。
  4. 提供统一标准的 REST API,以及 OpenAPI Swagger3 文档描述和准确的 Spring Validation 校验,可直接集成至系统中使用。
  5. Minio Client 对象池、自定义极简 Minio Server 访问反向代理,提升

2. 标准化业务逻辑和解决方案集合

  1. 不只是上传、下载等常用方法的封装,涵盖 Minio Java SDK 支持的所有方法和操作。
  2. 选择业内最优的解决方案,实现和集成大文件分片上传、秒传、直传、断点续传等主要业务需求功能。
  3. 结合自身应用经验和需求,将 Minio API 进一步组合成符合实际应用的业务逻辑和功能处理。
  4. 采用一个基于 Vue3、Typescript5、Vite4、Pinia 2 的完整的前端项目作为集成示例,包括详细的 Typescript 类型定义以及 vue-simple-uploader 等主流组件集成和使用方法。
  5. 提供基于 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

  • [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、
其它功能 正逐步完善,主要涉及前后端交互、以及可用性验证和前端相关功能的开发,敬请期待,欢迎 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 下载(流模式) 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

  1. maven 中引入
<dependency>
    <groupId>cn.herodotus.oss</groupId>
    <artifactId>minio-spring-boot-starter</artifactId>
    <version>最新版本</version>
</dependency>
  1. 配置 yml 参数
herodotus:
  oss:
    minio:
      endpoint: http://127.0.0.1:9000
      access-key: xxxxxx
      secret-key: xxxxxx
  1. 统一错误处理
// 参考代码
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

  1. 在 Gitee fork 项目到自己的 repo
  2. 把 fork 过去的项目也就是你的项目 clone 到你的本地
  3. 修改代码(记得一定要修改 develop 分支)
  4. commit 代码,push 到自己的库(develop 分支)
  5. 登录 Gitee 在你首页可以看到一个 pull request 按钮,点击它,填写一些说明信息,然后提交即可。
  6. 等待维护者合并

反馈 | Feedback

  • 欢迎提交ISSUS ,请写清楚问题的具体原因,重现步骤和环境
浏览 9
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报