天气与日历 切换到窄版

 找回密码
 立即注册

QQ登录

只需一步,快速开始

【好消息,好消息,好消息】VIP会员可以发表文章赚积分啦 !
查看: 22|回复: 0

[Java源码] MinIO-Plus 是一个 MinIO 的二次封装与增强工具 简化开发、提高效率 实现 文件秒传 并发上传 断点续传 缩略图生成

[复制链接]

2680

主题

0

回帖

2819

积分

管理员

积分
2819
发表于 2024-11-4 22:50:38 | 显示全部楼层 |阅读模式
MinIO-Plus 是一个 MinIO 的二次封装与增强工具,在 MinIO 的基础上只做增强,不侵入 MinIO 代码,只为简化开发、提高效率而生。成为 MinIO 在项目中落地的润滑剂。
1 特性 | Feature
  • 无侵入 :只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。
  • 文件秒传 :对每个上传的文件进行哈希摘要识别,用户上传同一个文件时,没有文件实际传输过程,做到秒传。
  • 并发上传 :将文件切分为小块。同时并发上传多个小块,最大限度地利用带宽,加快上传速度。
  • 断点续传 :在传输过程中遇到问题导致传输失败,只需重新传输未完成的小块,而不需要重新开始整个传输任务。
  • 缩略图生成 :识别文件类型,在图片上传时自动生成缩略图,缩略图大小可配置。
  • 自动桶策略 :按照文档、压缩包、音频、视频、图片等类型自动建桶,按照/年/月划分路径,避免受到操作系统文件目录体系影响导致性能下降。
  • 访问权限控制 :可支持基于用户、组的文件权限控制,保证重要文件的安全性。
  • 访问链接时效 :基于 MinIO 的临时链接创建策略,提供具备有效期并预签名的上传与下载地址。
  • 前端直连 :前端直连 MinIO ,项目工程不做文件流的搬运,在支持以上特性的情况下提供 MinIO 原生性能。
  • 极佳的兼容性 :JDK 从 1.8 至 17+,并同时支持 SpringBoot2 和 SpringBoot3。
添加依赖[color=var(--vp-c-brand-1)]

引入 MinIO Plus Starter 依赖

Spring Boot 2

  • <dependencys>
  •     <dependency>
  •         <groupId>me.liuxp</groupId>
  •         <artifactId>minio-plus-all-springboot2-starter</artifactId>
  •         <version>1.0.0</version>
  •     </dependency>
  •     <dependency>
  •         <groupId>me.liuxp</groupId>
  •         <artifactId>s3-api-minio</artifactId>
  •         <version>1.0.0</version>
  •     </dependency>
  • </dependencys>

[color=rgb(51, 102, 153) !important]复制代码

Spring Boot 3
  • <dependencys>
  •     <dependency>
  •         <groupId>me.liuxp</groupId>
  •         <artifactId>minio-plus-all-springboot-starter</artifactId>
  •         <version>1.0.0</version>
  •     </dependency>
  •     <dependency>
  •         <groupId>me.liuxp</groupId>
  •         <artifactId>s3-api-minio</artifactId>
  •         <version>1.0.0</version>
  •     </dependency>
  • </dependencys>

[color=rgb(51, 102, 153) !important]复制代码

配置参数[color=var(--vp-c-brand-1)]

在application.yml配置文件中,添加 MinIO Plus 相关配置项:

  • ##################################################################
  • ### MinIO Plus Config
  • ##################################################################
  • minioplus:
  •     # MinIO 部署地址
  •     backend: http://localhost:9000
  •     # 授权key
  •     key: minioadmin
  •     # 密钥
  •     secret: minioadmin

[color=rgb(51, 102, 153) !important]复制代码

本项目可用于商业项目

上传[color=var(--vp-c-brand-1)]

/TODO 上传流程活动图

秒传



当用户重复上传相同的文件时,每次都需要执行一次完整的文件上传操作,这造成了文件上传过程的冗余,即浪费了用户的时间和服务器的网络IO,重复文件又占用了不必要的服务器磁盘空间。 针对以上两个问题,minio-plus支持文件秒传特性,解决了传统文件上传中重复文件上传时的问题,提高了文件传输的效率和用户体验,同时减少了文件服务器的存储空间占用。 实现文件秒传的技术问题主要涉及文件唯一标识的生成和文件重复性检测。

  • 文件唯一标识生成:在浏览器端,使用MD5哈希算法对待传输文件进行哈希值编码。编码结果为一字符串,作为文件的唯一标识。
  • 文件重复性检测:在服务器端,根据接收到的文件唯一标识在数据库中进行搜索。如果在数据库中找到相同的文件唯一标识,那么判断该文件存在且无需再进行文件传输。
分片上传[color=var(--vp-c-brand-1)]

分片上传是一种将大文件划分为多个片段并发或按序上传的技术。它有以下几个好处:

  • 提高传输速度:当上传的文件比较大时,将大文件进行分块,同时并发上传多个小块,而不是一整个大文件按顺序上传。这样可以最大限度地利用带宽,从而加快上传速度。
  • 支持断点续传:分块上传是断点续传技术的前置条件,要想实现断点续传,必须先支持分块。



断点续传[color=var(--vp-c-brand-1)]

断点续传依赖于分片技术,是提高可用性的重要手段,优点如下:

  • 节省时间、减少网络IO、减少磁盘IO:在文件传输过程中遇到问题导致传输失败时,只需重新传输未完成的分片,而不需要重新开始整个传输任务。
  • 增加传输的可靠性:可以避免由于网络波动或其他原因导致整个文件需要重新传输的情况。再也不怕意外断网。在大文件传输时,尤其有用。
  • 随时暂停和恢复:用户可以在传输过程中暂停传输或者中断传输,断点续传可以方便地恢复传输任务。
下载


浏览器向服务端发起文件读取请求,服务端会根据fileKey入参取得文件的元数据信息。获取文件元数据信息后,根据元数据信息中的是否私有字段和所有者字段判断是否具备文件读取权限。

  • 当用户具备读取权限时,服务端请求MinIO服务器获取经过预签名的文件访问地址返回给浏览器。
  • 当用户不具备读取权限时,返回给浏览器无访问权限提示信息。

浏览器拿到真实文件地址后,读取文件并显示或下载。

客户端直连[color=var(--vp-c-brand-1)]

当用户进行文件流的上传和下载时,直接访问MinIO服务器(可配置Nginx代理)。

使用minioclient的GetPresignedObjectUrlArgs方法,入参是一个GetPresignedObjectUrlArgs对象,该对象包含了以下属性:

  • bucketName:要访问的桶名。
  • objectName:要访问的对象名。
  • expires:URL的过期时间,单位为秒。

该方法的返回值是一个字符串类型的URL,可以用于访问指定的对象,示例:

  • http://127.0.0.1:9000/test/test123
  • ?response-content-type=application%2Fmsword%22&response-content-disposition=attachment%3Bfilename%3D%22xxx.doc%22
  • &X-Amz-Algorithm=AWS4-HMAC-SHA256
  • &X-Amz-Credential=minioadmin%2F20230620%2Fus-east-1%2Fs3%2Faws4_request
  • &X-Amz-Date=20230620T071735Z
  • &X-Amz-Expires=60&X-Amz-SignedHeaders=host
  • &X-Amz-Signature=5be3535042ffe72fedee8a283e7a5afbc2b068c595c16800cf57f089ed891cc5

[color=rgb(51, 102, 153) !important]复制代码

每次前端请求文件时,都会生成预签名文件地址,文件地址中,有日期、时效、签名。MinIO会进行验签,保证安全性。

PS:附件中包含本例源码及示例源码,文档。

以下内容需要积分高于 2 才可浏览

链接: https://pan.baidu.com/s/1T1l53o9UAu-DAQ2833xS0Q



提取码下载:

文件名称:提取码下载.txt 
下载次数:0  文件大小:13 Bytes  售价:39金钱 [记录]
下载权限: 不限 [购买VIP]   [充值]   [在线充值]   【VIP会员5折;永久VIP免费】
安全检测,请放心下载







相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员5折;永久VIP免费
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性,由于源码具有复制性,一经售出,概不退换。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
快速回复 返回顶部 返回列表