暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SpringBoot + Minio 实现文件切片极速上传技术

手机用户4246 2024-10-21
360

官网地址:

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

创建目标文件夹

mkdir minio

使用docker查看目标镜像状况

大家需要注意,此处我们首先需要安装docker,对于相关安装教程,大家可以查看我之前的文章,按部就班就可以,此处不再赘述!!!

docker search minio

使用docker拉去镜像

docker pull minio/minio

查看镜像是否拉取成功

docker images

启动Minio容器

docker run -p 9000:9000 -p 9090:9090      --net=host      --name minio      -d --restart=always      -e "MINIO_ACCESS_KEY=IT@WangHui"      -e "MINIO_SECRET_KEY=IT@WangHui"            minio/minio server      /data --console-address ":9000" -address ":9090"

注意一下,对于密码强度是有要求的,不然报错

这是一个运行 MinIO 容器的 Docker 命令,具体参数解释如下:

  • -p: 映射容器内部的端口到宿主机上。其中 9000 和 9090 分别映射到宿主机的 9000 和 9090 端口上。
  • --net=host: 将容器加入到主机网络中,共享宿主机的 IP 地址。
  • --name minio: 指定容器的名称为 minio。
  • --restart=always: 设置容器在退出后自动重新启动。
  • -e: 设置环境变量。这里设置了两个环境变量:MINIO_ACCESS_KEYMINIO_SECRET_KEY,值分别为 IT@WangHuiIT@WangHui
  • --mount: 将容器内部的目录挂载到宿主机上。这里将容器内的 /data 目录挂载到了宿主机的 /data 目录上。
  • --console-address: 指定容器的控制台地址。这里设置为 :9000,表示可以通过宿主机上的 9000 端口访问容器的控制台。
  • -address: 指定容器的网络地址。这里设置为 :9090,表示可以通过宿主机上的 9090 端口访问容器的服务。

提示:页面访问9000,代码里面9090

提示:页面访问9000,代码里面9090

提示:页面访问9000,代码里面9090

报错警告

原因:

主要是因为在启动docker容器的时候或做docker配置的时候,还对防火墙设置重新启动等配置,这样会清除docker的相关配置,导致在查询防火墙规则的时候显示不到docker的链。iptables -L查询iptables链。

解决:

是由于firewalld重启导致,而docker重启又会将其注册iptables链找回来。

然后删除刚才启动失败的容器,不然会继续报错容器已存在

systemctl restart docker #重启docker
docker ps -a #查看运行容器
docker rm -f minio #根据容器名删除容器(自己注意辨别自己的)

当启动后在浏览器访问http://localhost:9000就可以访问minio的图形化界面了,如图所示:

用户名密码就是启动参数里面的数据

如果访问失败,那就是防火墙问题或者是启动参数最后两项没有添加,再不会有其他的,除非容器没有启动成功

查看放行端口可以使用如下命令

firewall-cmd --list-ports

要放行CentOS 7上的9000端口和9090端口,您可以按照以下步骤操作:

1.检查防火墙状态

使用以下命令检查防火墙状态:

systemctl status firewalld

如果防火墙已停止,则启动它:

systemctl start firewalld
2.允许9000端口通过防火墙

使用以下命令允许TCP流量通过9000端口:

firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9090/tcp --permanent

这将向防火墙添加一个规则,以允许TCP流量通过9000端口。要永久保存此更改,请运行以下命令:

firewall-cmd --reload
3.重新启动防火墙服务shell

使用以下命令重新启动防火墙服务:

systemctl restart firewalld

现在,您已经成功地放行了CentOS 7上的9000和9090端口。

五. 搭建springboot 环境

代码结构

引入项目依赖

<!-- 操作minio的java客户端-->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.2</version>
</dependency>
<!-- 操作minio的java客户端-->
 <dependency>
    <groupId>io.minio</groupId>
     <artifactId>minio</artifactId>
     <version>8.2.1</version>
</dependency>
<!--        jwt鉴权相应依赖-->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>0.11.2</version>
</dependency>

创建容器桶

获取API访问凭证

编写配置文件

server:
    port: 8080
spring:
    servlet:
        multipart:
            max-file-size: 10MB
            max-request-size: 10MB
    #minio配置
    minio:
        access-key: dAMaxkWaXUD1CV1JHbqw
        secret-key: AXt3SD0JFkDENFbMeJKOOQb5wj8KvabZWu33Rs84
        url: http://192.168.18.14:9090  #访问地址
        bucket-name: wanghui

首先是服务器的配置:

  • 端口号为8080,用于监听请求。
  • 使用了一个Servlet来处理multipart/form-data类型的请求。
  • 在接收到multipart/form-data类型的请求时,会将上传的文件大小限制在10MB以内,并将请求大小限制在10MB以内。

接下来是minio的配置:

  • access-keysecret-key是访问minio服务的凭证,需要根据实际情况进行填写。
  • url是minio服务的地址,需要根据实际情况进行填写。
  • bucket-name是存储文件的桶名,需要根据实际情况进行填写。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论