乐趣区

关于springboot:SpringBoot2-整合MinIO中间件实现文件便捷管理

本文源码:GitHub·点这里 || GitEE·点这里

一、MinIO 简介

1、根底形容

MinIO 是一个开源的对象存储服务。适宜于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器 / 虚拟机镜像等,而一个对象文件能够是任意大小,从几 kb 到最大 5T 不等。

MinIO 是一个十分轻量的服务, 能够很简略的和其余利用的联合,相似 NodeJS, Redis 或者 MySQL。

2、存储机制

MinIO 应用按对象的嵌入式擦除编码爱护数据,该编码以汇编代码编写,可提供最高的性能。MinIO 应用 Reed-Solomon 代码将对象划分为 n / 2 个数据和 n / 2 个奇偶校验块 - 只管能够将它们配置为任何所需的冗余级别。这意味着在 12 个驱动器设置中,将一个对象分片为 6 个数据和 6 个奇偶校验块。即便失落了多达 5 个 ((n/2)–1) 个驱动器(无论是奇偶校验还是数据),依然能够从其余驱动器牢靠地重建数据。MinIO 的实现可确保即便失落或无奈应用多个设施,也能够读取对象或写入新对象。最初,MinIO 的擦除代码位于对象级别,并且能够一次修复一个对象。

二、MinIO 环境搭建

1、安装包下载

https://dl.min.io/server/minio/release/linux-amd64/minio

倡议应用某雷下载,速度会快点,下载包上传到 /opt/minioconfig/run 目录下。

2、创立数据存储目录

mkdir -p /data/minio/data

3、服务启动

启动并指定数据寄存地址

/opt/minioconfig/run/minio server /data/minio/data/

输入日志

Endpoint:  http://localhost:9000  http://127.0.0.1:9000    
AccessKey: minioadmin 
SecretKey: minioadmin

这里就是登录地址和账号密码。

三、整合 SpringBoot 环境

1、根底依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>3.0.12</version>
</dependency>

2、根底配置

配置因素:地址和端口,登录名,明码,HTML 存储桶,图片存储桶。

minio:
  endpoint: http://192.168.72.133:9000
  accessKey: minioadmin
  secretKey: minioadmin
  bucketNameHtml: html
  bucketNameImage: image

文件上传之后,能够基于文件地址间接拜访,然而须要在 MinIO 中配置文件的读写权限:

3、配置参数类

@Component
@ConfigurationProperties(prefix = "minio")
public class ParamConfig {

    private String endpoint ;
    private String accessKey ;
    private String secretKey ;
    private String bucketNameHtml ;
    private String bucketNameImage ;
    // 省略 get 和 set 办法
}

4、基于 MinIO 配置类

封装 MinIO 客户端连贯工具,文件上传的根底办法,返回文件在 MinIO 服务上的 URL 地址。

import io.minio.MinioClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;

@Component
public class MinIOConfig {private static final Logger LOGGER = LoggerFactory.getLogger(MinIOConfig.class) ;

    @Resource
    private ParamConfig paramConfig ;

    private MinioClient minioClient ;

    /**
     * 初始化 MinIO 客户端
     */
    @PostConstruct
    private void init(){
        try {minioClient = new MinioClient(paramConfig.getEndpoint(),
                                          paramConfig.getAccessKey(),
                                          paramConfig.getSecretKey());
        } catch (Exception e) {e.printStackTrace();
            LOGGER.info("MinIoClient init fail ...");
        }
    }

    /**
     * 上传 <html> 页面
     */
    public String uploadHtml (String fileName, String filePath) throws Exception {minioClient.putObject(paramConfig.getBucketNameHtml(),fileName,filePath);
        return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameHtml()+"/"+fileName ;
    }

    /**
     * 上传 <img> 图片
     */
    public String uploadImg (String imgName, String imgPath) throws Exception {minioClient.putObject(paramConfig.getBucketNameImage(),imgName,imgPath);
        return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameImage()+"/"+imgName ;
    }
}

5、服务实现

提供两个根底办法:HTML 和图片上传,存储在不同地位。

import com.minio.file.config.MinIOConfig;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;

@Service
public class UploadServiceImpl implements UploadService {

    @Resource
    private MinIOConfig minIOConfig ;

    // 上传 <html> , 返回服务器地址
    @Override
    public String uploadHtml(String fileName, String filePath) throws Exception {return minIOConfig.uploadHtml(fileName,filePath);
    }

    // 上传 <img> , 返回服务器地址
    @Override
    public String uploadImg(String imgName, String imgPath) throws Exception {return minIOConfig.uploadImg(imgName,imgPath);
    }
}

上传之后,基于浏览器拜访接口返回的 url,查看成果:

四、源代码地址

GitHub·地址
https://github.com/cicadasmile/middle-ware-parent
GitEE·地址
https://gitee.com/cicadasmile/middle-ware-parent

举荐浏览:SpringBoot 进阶系列

序号 文章题目
01 Boot2 整合 shard-jdbc 中间件,实现数据分库分表
02 Boot2 整合 JavaMail , 实现异步发送邮件性能
03 Boot2 整合 RocketMQ , 实现申请异步解决
04 Boot2 整合 Swagger2 , 构建接口治理界面
05 Boot2 整合 QuartJob , 实现定时器实时治理
06 Boot2 整合 Redis 集群 , 实现音讯队列场景
07 Boot2 整合 Dubbo 框架 , 实现 RPC 服务近程调用
08 Boot2 整合 ElasticSearch 框架, 实现高性能搜索引擎
09 Boot2 整合 JWT 框架, 解决 Token 跨域验证问题
10 Boot2 整合 FastDFS 中间件,实现文件散布治理
11 Boot2 整合 Shiro 框架,实现用户权限治理
12 Boot2 整合 Security 框架,实现用户权限治理
13 Boot2 整合 ClickHouse 数据库,实现数据高性能查问剖析
14 Boot2 整合 Drools 规定引擎,实现高效的业务规定
15 Boot2 整合 多数据源,配置 MybatisPlus 加强插件
16 Boot2 整合 Zookeeper 组件,治理架构中服务协调
17 Boot2 整合 Nacos 组件,环境搭建和入门案例详解
18 文件系统(01):基于 Boot2 框架,治理 Excel 和 PDF
18 文件系统(02):基于 Boot2 框架,治理 Xml 和 CSV
19 Boot2 整合 Kafka 组件,利用案例和流程详解
20 Boot2 整合 ElasticJob 框架,定制化治理流程
21 Boot2 整合 JTA 组件,多数据源事务管理
22 Boot2 整合 FreeMarker 模板,实现页面动态化解决
退出移动版