Spring Boot 整合 MinIO 实现分布式文件服务Springboot

  • 173

Spring Boot 整合 MinIO 实现分布式文件服务

FastDFS 陪伴我走过了很多年,当年大学的时候就是用 FastDFS 为项目搭建的分布式存储服务。

不过,随着技术的进步。FastDFS 正在慢慢被大家放弃,这玩意好用是好用,部署起来也是真的麻烦,臃肿。

今天分享一个非常不错且开源的分布式存储组件 MinIO,比 FastDFS 更简单易用,并且功能也更加强大!

Spring Boot 整合 MinIO 实现分布式文件服务

什么是 MinIO?

Minio 是个基于 Golang 编写的开源对象存储套件,基于 Apache License v2.0 开源协议,虽然轻量,却拥有着不错的性能。它兼容亚马逊 S3 云存储服务接口。可以很简单的和其他应用结合使用,例如 NodeJS、Redis、MySQL 等。

1. 应用场景

MinIO 的应用场景除了可以作为私有云的对象存储服务来使用,也可以作为云对象存储的网关层,无缝对接 Amazon S3 或者 MicroSoft Azure

Spring Boot 整合 MinIO 实现分布式文件服务

2. 特点

  1. 高性能:作为一款高性能存储,在标准硬件条件下,其读写速率分别可以达到 55Gb/s35Gb/s。并且 MinIO 支持一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。
  2. 可扩展:不同 MinIO 集群可以组成联邦,并形成一个全局的命名空间,并且支持跨越多个数据中心。
  3. 云原生:容器化、基于 K8S 的编排、多租户支持。
  4. Amazon S3 兼容:使用 Amazon S3 v2 / v4 API。可以使用 Minio SDK,Minio Client,AWS SDK 和 AWS CLI 访问 Minio 服务器。
  5. SDK 支持:GO SDK:https://github.com/minio/minio-go,JavaSDK:https://github.com/minio/minio-java,PythonSDK:https://github.com/minio/minio-py
  6. 图形化界面:有操作页面
  7. 支持纠删码:MinIO 使用纠删码、Checksum 来防止硬件错误和静默数据污染。在最高冗余度配置下,即使丢失 1/2 的磁盘也能恢复数据。

功能很强大,本文只是抛砖引玉,有兴趣的朋友自己去探索吧~

安装 MinIO

安装非常简单,笔者这里使用 Docker 安装,步骤如下:

1. 获取镜像

执行命令如下:

docker pull minio/minio

2. 启动镜像

执行命令如下:

 docker run -p 9000:9000 -p 9001:9001 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin" -v /home/data:/data -v /home/config:/root/.minio minio/minio server --console-address ":9000" --address ":9001" /data

命令解释如下:

  • -p9000是图形界面的端口,9001是 API 的端口,在使用 SDK 连接需要用到
  • MINIO_ACCESS_KEY:指定图形界面的用户名
  • MINIO_SECRET_KEY:指定图形界面的密码

按照上述两个步骤启动成功即可。

3. 图形界面操作

安装成功后直接访问地址:http:/ip:9000/login,如下:

Spring Boot 整合 MinIO 实现分布式文件服务

输入用户名和密码登录成功后,如下:

Spring Boot 整合 MinIO 实现分布式文件服务

菜单很多,这里就不再详细介绍了,笔者这里直接在Buckets菜单中创建一个桶为test,如下图:

Spring Boot 整合 MinIO 实现分布式文件服务

并且设置这个桶的隐私规则为public,如下:

Spring Boot 整合 MinIO 实现分布式文件服务

MinIO 到此已经安装设置成功了

Spring Boot 整合 MinIO 上传文件

虽然 MinIO 在图形界面提供了手动上传的操作,但是也可以通过 SDK 的方式去上传,下面介绍一下 Spring Boot 整合 MinIO 上传文件。

1. 获取 accessKey 和 secretKey

这里的accessKeysecretKey并不是图形界面登录名和密码,获取很简单,直接在图形界面中操作,如下图:

Spring Boot 整合 MinIO 实现分布式文件服务
Spring Boot 整合 MinIO 实现分布式文件服务

2. 添加依赖

添加 MinIO 的依赖,如下:

dependency>
    groupId>io.miniogroupId>
    artifactId>minioartifactId>
    version>8.2.1version>
dependency>

3. 添加配置

这里笔者对 SDK 做了简单的封装,案例源码都会提供,下面只列出部分代码。

aplication.yml配置中添加 MInIO 相关的配置,如下:

minio:
  # 访问的url
  endpoint: http://192.168.47.148
  # API的端口
  port: 9001
  # 秘钥
  accessKey: HQGWFYLWGC6FVJ0CQFOG
  secretKey: pUGhAgQhZDxJaLmN3uz65YX7Bb3FyLdLglBvcCr1
  secure: false
  bucket-name: test # 桶名 我这是给出了一个默认桶名
  image-size: 10485760 # 我在这里设定了 图片文件的最大大小
  file-size: 1073741824 # 此处是设定了文件的最大大小

4. 新建上传文件接口

笔者这里定义了一个上传文件接口,如下:

/**
 * @author 公众号:码猿技术专栏
 */
@RequestMapping("/minio")
@RestController
public class MinioController {

    @Autowired
    private  MinioService minioService;

    @PostMapping("/upload")
    public String uploadFile(MultipartFile file, String bucketName) {
        String fileType = FileTypeUtils.getFileType(file);
        if (fileType != null) {
            return minioService.putObject(file, bucketName, fileType);
        }
        return "不支持的文件格式。请确认格式,重新上传!!!";
    }
}

5. 测试

上述 4 个步骤已经整合完成了,下面直接调用接口上传一张图片试一下,如下:

Spring Boot 整合 MinIO 实现分布式文件服务
图片

接口返回的URL就是文件的访问地址,直接输入浏览器访问即可。

在 MInIO 中也可以看到存储的文件,如下图:

Spring Boot 整合 MinIO 实现分布式文件服务

如果你需要分享给别人,也可以手动分享,有效期是 7 天,一旦过了这个有效期将会失效,如下:

Spring Boot 整合 MinIO 实现分布式文件服务

📚文章说明:
1、本文章链接失效后,请通过右下角企鹅QQ告知管理员,24小时内补链接,谢谢。点击下载说明了解。
2、天天精品分享的资源均通过网络公开合法渠道获取的,仅阅读交流测试使用,请在下载后24小时内删除。
3、版权归作者或出版社方所有,本站不对涉及的版权问题负法律责任。点击免责申明了解详情。
4、若版权方认为天天精品侵权,请联系客服QQ或发送邮件myttjp@163.com处理。
5、会员和精品豆系对搜集搬运、整理及网站运营做的友情赞助,非购买文件费用,敬请谅解。点击关于本站了解本站。
6、每位访客应尊重版权方的知识产权,支持版权方和出版社。

发表评论