来源:juejin.cn/post/7304539173972983860

👉 欢迎加入小哈的星球,你将获得:专属的项目实战 /1v1 提问/Java 学习路线 /学习打卡/每月赠书/社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,点击查看项目介绍
  • 《从零手撸:前后端分离博客项目(全栈开发)》2期已完结,演示链接:http://116.62.199.48/;

截止目前,累计输出 47w+ 字,讲解图 2090+ 张,还在持续爆肝中..后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,已有1700+小伙伴加入(早鸟价超低)

一. 概述

提示:请不要多个博客来回跳着看,此文章之详细绝无仅有,融合多家之长,如果遇见报错,请仔细捋一遍文章,不要忽略!我在写的时候因为许多文章不全面,来回跳遇见许多坑,希望大家可以避免,本文章中悉数做了标注提醒!!!

官网地址:

https://min.io/

文档地址:

https://docs.min.io/

该文档源码地址(免费资源):

https://download.csdn.net/download/weixin_53742691/87856930

Minio是一款开源的对象存储服务器,它可以运行在多种操作系统上,包括Linux、Windows和MacOS等。它提供了一种简单、可扩展、高可用的对象存储解决方案,支持多种数据格式,包括对象、块和文件等。

以下是Minio的主要特点:

  • 简单易用: Minio的安装和配置非常简单,只需要下载并运行相应的二进制文件即可。它提供了一个Web UI,可以通过界面管理存储桶和对象。

  • 可扩展性: Minio可以轻松地扩展到多个节点,以提供高可用性和容错能力。它支持多种部署模式,包括单节点、主从复制和集群等。

  • 高可用性: Minio提供了多种机制来保证数据的可靠性和可用性,包括冗余备份、数据复制和故障转移等。

  • 安全性: Minio提供了多种安全机制来保护数据的机密性和完整性,包括SSL/TLS加密、访问控制和数据加密等。

  • 多语言支持: Minio支持多种编程语言,包括Java、Python、Ruby和Go等。

  • 社区支持: Minio是一个开源项目,拥有庞大的社区支持和贡献者。它的源代码可以在GitHub上获得,并且有一个活跃的邮件列表和论坛。

  • 对象存储: Minio的核心功能是对象存储。它允许用户上传和下载任意数量和大小的对象,并提供了多种API和SDK来访问这些对象。

  • 块存储: Minio还支持块存储,允许用户上传和下载大型文件(例如图像或视频)。块存储是一种快速、高效的方式来处理大型文件。

  • 文件存储: Minio还支持文件存储,允许用户上传和下载单个文件。文件存储是一种简单、快速的方式来处理小型文件。

总之,Minio是一款强大、灵活、可扩展的对象存储服务器,适用于各种应用场景,包括云存储、大数据存储和物联网等。

二. 应用场景

MinIO是一种高性能、扩展性好的对象存储系统,它可以适用于许多应用场景,其中包括但不限于以下几种:

  • 大规模数据存储: 由于MinIO使用分布式环境来存储数据,因此可以轻松扩展以满足需要管理大量数据的组织和企业的需求。

  • 图像和媒体存储: 由于MinIO对原始二进制数据进行了优化,因此非常适合存储图像、音频和视频等媒体文件。它还支持WebP、JPEG和PNG等格式,可在多种设备和浏览器上工作。

  • 云原生应用程序: MinIO是一个云原生的对象存储系统,可以与Kubernetes、Docker Swarm和Mesosphere等容器编排工具无缝集成,可以很好地满足基于云的应用程序的需求。

  • 数据保护和灾难恢复: MinIO的多副本写入功能和内置的纠删码支持,使得数据备份和恢复变得简单而强大。

  • 分布式计算和机器学习: MinIO提供STS(S3 Select)和HDFS接口,支持在数据仓库中直接运行SQL查询和MapReduce等并行处理框架。这使得它成为用于Big Data、AI和ML等分布式计算任务的理想选择。

需要注意的是,以上列出的应用场景并不是MinIO所有可适用的场景。具体取决于每个使用情况的细节和需求。

三. Minio实现分片上传的主要步骤

使用SpringBoot和MinIO实现分片上传、秒传、续传主要包含以下几个步骤:

  • 前端选择文件并对其进行切割: 可以使用JavaScript等前端技术将文件切成多个片段,并为每个片段生成唯一标识。

  • 将每个分片上传到MinIO对象存储: 调用MinIO的Java SDK将每个分片上传到MinIO中,每个分片的KEY名称包含基础名称和片段ID。

  • 将所有分片合并成最终文件: 在前端完成所有分片的上传之后,在后台开发一个接口,按照唯一标识将所有分片合并成最终文件。合并过程可以在应用服务器上完成,也可以使用MinIO Object Storage本身的合并功能完成。

  • 实现秒传: 在前端上传分片之前,通过请求后台接口来根据文件名称和文件MD5值判断该文件是否已经存在,如果存在则可以直接返回文件URL,即可实现秒传。

  • 实现续传: 在前端上传分片时出现了网络问题或客户端故障导致文件上传被中断,这时候只需记录已上传的分片序列号和状态标志,从下一个分片重新开始上传即可。

  • 处理错误和异常: 在文件上传过程中可能会遇到各种问题,比如服务故障、网络中断、客户端处理超时等。因此需要加入错误和异常处理,保证整个上传过程顺利进行。

总体而言,使用SpringBoot和MinIO实现分片上传、秒传、续传的难度不算大,可以根据上述步骤进行开发和实现。

四. Centos7安装Minio

创建目标文件夹

packagecom.xiaohui.controller;importcom.xiaohui.utils.AjaxResult;importcom.xiaohui.utils.MinioUtils;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.*;importorg.springframework.web.multipart.MultipartFile;importjava.util.HashMap;/***@Descriptionminio文件上传控制器*@AuthorIT小辉同学*@Date2023/06/02*/@CrossOrigin@RestController@RequestMapping("/api")publicclassMinioFileUploadController{@AutowiredprivateMinioUtilsminioUtils;/***@paramfile文件*@paramfileName文件名称*@return{@linkAjaxResult}*@Description上传文件*@AuthorIT小辉同学*@Date2023/06/02*/@GetMapping("/upload")publicAjaxResultuploadFile(@RequestParam("file")MultipartFilefile,StringfileName){minioUtils.upload(file,fileName);returnAjaxResult.success("上传成功");}/***@paramfileName文件名称*@return{@linkResponseEntity}*@Descriptiondowload文件*@AuthorIT小辉同学*@Date2023/06/02*/@GetMapping("/dowload")publicResponseEntitydowloadFile(@RequestParam("fileName")StringfileName){returnminioUtils.download(fileName);}/***@paramfileName文件名称*@return{@linkAjaxResult}*@Description得到文件url*@AuthorIT小辉同学*@Date2023/06/02*/@GetMapping("/getUrl")publicAjaxResultgetFileUrl(@RequestParam("fileName")StringfileName){HashMapmap=newHashMap();map.put("FileUrl",minioUtils.getFileUrl(fileName));returnAjaxResult.success(map);}}

六. 功能测试

Minio大文件上传

Minio大文件地址

👉 欢迎加入小哈的星球,你将获得:专属的项目实战 /1v1 提问/Java 学习路线 /学习打卡/每月赠书/社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...,点击查看项目介绍
  • 《从零手撸:前后端分离博客项目(全栈开发)》2期已完结,演示链接:http://116.62.199.48/;

截止目前,累计输出 47w+ 字,讲解图 2090+ 张,还在持续爆肝中..后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,已有1700+小伙伴加入(早鸟价超低)

1.我的私密学习小圈子~

2.一款开源、优雅、强大的物联网系统

3.XXL-JOB内部机制大揭秘,任务飞起来!

4.自从用了这款 IDEA 神器,领导都夸我代码写得好!

最近面试BAT,整理一份面试资料Java面试BATJ通关手册,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复Java领取,更多内容陆续奉上。

PS:因公众号平台更改了推送规则,如果不想错过内容,记得读完点一下在看,加个星标,这样每次新文章推送才会第一时间出现在你的订阅列表里。

“在看”支持小哈呀,谢谢啦

本篇文章来源于微信公众号: 小哈学Java



微信扫描下方的二维码阅读本文

此作者没有提供个人介绍
最后更新于 2024-08-01