本文源码: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;@Componentpublic 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;@Servicepublic 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-parentGitEE·地址https://gitee.com/cicadasmile/middle-ware-parent

举荐浏览:SpringBoot进阶系列

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