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/

输出日志

1Endpoint: http://localhost:9000 http://127.0.0.1:9000 2AccessKey: minioadmin 3SecretKey: minioadmin

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

三、整合SpringBoot环境

1、基础依赖

1<dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-web</artifactId> 4</dependency> 5<dependency> 6 <groupId>io.minio</groupId> 7 <artifactId>minio</artifactId> 8 <version>3.0.12</version> 9</dependency>

2、基础配置

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

1minio: 2 endpoint: http://192.168.72.133:9000 3 accessKey: minioadmin 4 secretKey: minioadmin 5 bucketNameHtml: html 6 bucketNameImage: image

文件上传之后,可以基于文件地址直接访问,但是需要在MinIO中配置文件的读写权限:

3、配置参数类

1@Component 2@ConfigurationProperties(prefix = "minio") 3public class ParamConfig { 4 5 private String endpoint ; 6 private String accessKey ; 7 private String secretKey ; 8 private String bucketNameHtml ; 9 private String bucketNameImage ; 10 // 省略 get 和 set方法 11}

4、基于MinIO配置类

封装MinIO客户端连接工具,文件上传的基础方法,返回文件在MinIO服务上的URL地址。

1import io.minio.MinioClient; 2import org.slf4j.Logger; 3import org.slf4j.LoggerFactory; 4import org.springframework.stereotype.Component; 5import javax.annotation.PostConstruct; 6import javax.annotation.Resource; 7 8@Component 9public class MinIOConfig { 10 11 private static final Logger LOGGER = LoggerFactory.getLogger(MinIOConfig.class) ; 12 13 @Resource 14 private ParamConfig paramConfig ; 15 16 private MinioClient minioClient ; 17 18 /** 19 * 初始化 MinIO 客户端 20 */ 21 @PostConstruct 22 private void init(){ 23 try { 24 minioClient = new MinioClient(paramConfig.getEndpoint(), 25 paramConfig.getAccessKey(), 26 paramConfig.getSecretKey()); 27 } catch (Exception e) { 28 e.printStackTrace(); 29 LOGGER.info("MinIoClient init fail ..."); 30 } 31 } 32 33 /** 34 * 上传 <html> 页面 35 */ 36 public String uploadHtml (String fileName, String filePath) throws Exception { 37 minioClient.putObject(paramConfig.getBucketNameHtml(),fileName,filePath); 38 return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameHtml()+"/"+fileName ; 39 } 40 41 /** 42 * 上传 <img> 图片 43 */ 44 public String uploadImg (String imgName, String imgPath) throws Exception { 45 minioClient.putObject(paramConfig.getBucketNameImage(),imgName,imgPath); 46 return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameImage()+"/"+imgName ; 47 } 48}

5、服务实现

提供两个基础方法:HTML和图片上传,存储在不同位置。

1import com.minio.file.config.MinIOConfig; 2import org.springframework.stereotype.Service; 3import javax.annotation.Resource; 4 5@Service 6public class UploadServiceImpl implements UploadService { 7 8 @Resource 9 private MinIOConfig minIOConfig ; 10 11 // 上传 <html> ,返回服务器地址 12 @Override 13 public String uploadHtml(String fileName, String filePath) throws Exception { 14 return minIOConfig.uploadHtml(fileName,filePath); 15 } 16 17 // 上传 <img> ,返回服务器地址 18 @Override 19 public String uploadImg(String imgName, String imgPath) throws Exception { 20 return minIOConfig.uploadImg(imgName,imgPath); 21 } 22}

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

四、源代码地址

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

SpringBoot2 整合 Zookeeper组件,管理架构中服务协调

本文源码:GitHub·点这里(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fcicadasmile%2Fmiddlewareparent)||GitEE·点这里(https://gitee.com/cicadasmile/middleware

SpringBoot2 整合FreeMarker模板,完成页面静态化处理

本文源码:GitHub·点这里(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fcicadasmile%2Fmiddlewareparent)||GitEE·点这里(https://gitee.com/cicadasmile/middleware

SpringBoot2 整合Ehcache组件,轻量级缓存管理

本文源码:GitHub·点这里(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fcicadasmile%2Fmiddlewareparent)||GitEE·点这里(https://gitee.com/cicadasmile/middleware

SpringBoot2 整合MinIO中间件,实现文件便捷管理 - HelloWorld