SpringBoot整合MinIO
今天因为公司的需求接触到这个东西,我们先来看下MinIO的官网简介
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
字面意思 MinIO是一个文件存储服务 支持分布式,以及可搭建集群,单体项目所以不考虑集群,下面我们来安装它,我所在的环境为Linux
.https://dl.min.io/server/minio/release/linux-amd64/minio
.chmod +x minio
./minio server /data

这是启动好的样子,然后我们在浏览器里访问

让你填写AK和SK,把刚刚打印在控制台上的输入即可,如果想要修改的话通过以下方式可修改
export MINIO_ACCESS_KEY=AK
export MINIO_ACCESS_KEY=SK

登录成功后在页面右下角点击创建桶,也就是我们的文件夹

创建好后我们就直接可以来上传了,但我们的目前是在SpringBoot程序当中进行上传下载
首先我们来添加依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.0</version>
</dependency>

由于项目的原因我并没有把信息配置在YAML里面,可自行根据自己场景配置
import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import io.minio.messages.Bucket;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.kzwl.comm.advice.Consts;
import org.springframework.web.multipart.MultipartFile; import java.io.InputStream;
import java.util.List; /**
* Minio工具类
*/
@Slf4j
public class MinIoUtil { public static MinioClient minioClient; /**
* 初始化minio配置
*
* @param :
* @return: void
* @date : 2020/8/16 20:56
*/
@PostConstruct
public static void init() {
try {
log.info("Minio Initialize........................"); minioClient = MinioClient.builder().endpoint(Consts.Minio.Url).credentials(Consts.Minio.AccessKey,Consts.Minio.SecretKey).build();
createBucket(Consts.Minio.BucketName);
log.info("Minio Initialize........................successful");
} catch (Exception e) {
e.printStackTrace();
log.error("初始化minio配置异常: 【{}】", e.fillInStackTrace());
}
} /**
* 判断 bucket是否存在
*
* @param bucketName:
* 桶名
* @return: boolean
*/
@SneakyThrows(Exception.class)
public static boolean bucketExists(String bucketName) {
return minioClient.bucketExists(bucketName);
} /**
* 创建 bucket
*
* @param bucketName:
* 桶名
* @return: void
*/
@SneakyThrows(Exception.class)
public static void createBucket(String bucketName) {
boolean isExist = minioClient.bucketExists(bucketName);
if (!isExist) {
minioClient.makeBucket(bucketName);
}
} /**
* 获取全部bucket
*
* @param :
* @return: java.util.List<io.minio.messages.Bucket>
*/
@SneakyThrows(Exception.class)
public static List<Bucket> getAllBuckets() {
return minioClient.listBuckets();
} /**
* 文件上传
*
* @param bucketName:
* 桶名
* @param fileName:
* 文件名
* @param filePath:
* 文件路径
* @return: void
*/
@SneakyThrows(Exception.class)
public static void upload(String bucketName, String fileName, String filePath) {
minioClient.putObject(bucketName, fileName, filePath, null);
} /**
* 文件上传
*
* @param bucketName:
* 桶名
* @param fileName:
* 文件名
* @param stream:
* 文件流
* @return: java.lang.String : 文件url地址
*/
@SneakyThrows(Exception.class)
public static String upload(String bucketName, String fileName, InputStream stream) {
minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));
return getFileUrl(bucketName, fileName);
} /**
* 文件上传
*
* @param bucketName:
* 桶名
* @param file:
* 文件
* @return: java.lang.String : 文件url地址
*/
@SneakyThrows(Exception.class)
public static String upload(String bucketName, MultipartFile file) {
final InputStream is = file.getInputStream();
final String fileName = file.getOriginalFilename();
minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));
is.close();
return getFileUrl(bucketName, fileName);
} /**
* 删除文件
*
* @param bucketName:
* 桶名
* @param fileName:
* 文件名
* @return: void
*/
@SneakyThrows(Exception.class)
public static void deleteFile(String bucketName, String fileName) {
minioClient.removeObject(bucketName, fileName);
} /**
* 下载文件
*
* @param bucketName:
* 桶名
* @param fileName:
* 文件名
* @param response:
* @return: void
*/
// @SneakyThrows(Exception.class)
// public static void download(String bucketName, String fileName, HttpServletResponse response) {
// // 获取对象的元数据
// final ObjectStat stat = minioClient.statObject(bucketName, fileName);
// response.setContentType(stat.contentType());
// response.setCharacterEncoding("UTF-8");
// response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// InputStream is = minioClient.getObject(bucketName, fileName);
// IOUtils.copy(is, response.getOutputStream());
// is.close();
// } /**
* 获取minio文件的下载地址
*
* @param bucketName:
* 桶名
* @param fileName:
* 文件名
* @return: java.lang.String
* @date : 2020/8/16 22:07
*/
@SneakyThrows(Exception.class)
public static String getFileUrl(String bucketName, String fileName) {
return minioClient.presignedGetObject(bucketName, fileName);
} }
MinIO相对操作还是很简单,当然这是针对单机操作,如果并发量大的话,可考虑配置集群!
如有侵权请联系作者删除!
SpringBoot整合MinIO的更多相关文章
- SpringBoot 整合MinIO
引入依赖 <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifact ...
- spring-boot整合mybatis(1)
sprig-boot是一个微服务架构,加快了spring工程快速开发,以及简便了配置.接下来开始spring-boot与mybatis的整合. 1.创建一个maven工程命名为spring-boot- ...
- SpringBoot整合Mybatis之项目结构、数据源
已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...
- springboot整合mq接收消息队列
继上篇springboot整合mq发送消息队列 本篇主要在上篇基础上进行activiemq消息队列的接收springboot整合mq发送消息队列 第一步:新建marven项目,配置pom文件 < ...
- springboot整合mybaits注解开发
springboot整合mybaits注解开发时,返回json或者map对象时,如果一个字段的value为空,需要更改springboot的配置文件 mybatis: configuration: c ...
- SpringBoot整合Redis、ApachSolr和SpringSession
SpringBoot整合Redis.ApachSolr和SpringSession 一.简介 SpringBoot自从问世以来,以其方便的配置受到了广大开发者的青睐.它提供了各种starter简化很多 ...
- SpringBoot整合ElasticSearch实现多版本的兼容
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...
- SpringBoot整合Kafka和Storm
前言 本篇文章主要介绍的是SpringBoot整合kafka和storm以及在这过程遇到的一些问题和解决方案. kafka和storm的相关知识 如果你对kafka和storm熟悉的话,这一段可以直接 ...
- SpringBoot整合SpringCloud搭建分布式应用
什么是SpringCloud? SpringCloud是一个分布式的整体解决方案.SpringCloud为开发者提供了在分布式系统中快速构建的工具,使用SpringCloud可以快速的启动服务或构建应 ...
随机推荐
- 恕我直言,你可能真没用过这些 IDEA 插件!
一.前言 IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境.IntelliJ在业界被公认为最好的java开发工具. 不是我说的喔,百度百科说的... IDEA 如此好用,插 ...
- centos环境 使用kubeadm快速安装k8s集群v1.16.2
全程使用root用户运行,宿主机需要连接外网 浏览一下官方kubeadm[有些镜像用不了] https://kubernetes.io/docs/setup/production-environmen ...
- 5G从小就梦想着自己要迎娶:高速率、低时延、大容量三个老婆
摘要:2020年7月9日,ITU正式把NB-IoT纳入5G标准体系! 高速率.低时延与5G是青梅竹马的关系,在大容量的选择上,5G与NB-IoT不断传出着绯闻,终于:2020年7月9日,ITU正式把N ...
- 设计模式:建造者模式及在jdk中的体现,建造者模式和工厂模式区别
0.背景 建造模式(Builder模式) 假如有一个需求:盖房子,盖房子过程是一致的:打桩.砌墙.封顶.但是房子是各式各样的,最后盖出来的房子可能是高楼或别墅. 根据直接的思路,不用设计模式思想,我们 ...
- nohup 命令的使用
nohup 命令的使用 1. nohup简介 nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号.在注销后使用 nohup 命令运行后台中的 ...
- Javascript模块化编程(二):AMD规范 (转)
原文作者: 阮一峰 日期: 2012年10月30日 这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? ...
- ubuntu 本地源搭建
1.软件包放在 deps 目录下: dpkg-scanpackages deps /dev/null |gzip > deps/Packages.gz -r 2.更新 sources.list ...
- 第一篇 Scrum冲刺博客
一.Alpha任务认领 冯荣新 任务 预计时间 搜索框 0.5h 首页轮播图 0.5h 分类导航 2h 商品列表 2h 商品详情轮播图 0.5h 商品底部工具栏 1h 购物车列表 1.5h 购物车工具 ...
- Excel数据分析 --数据透析表
数据透析表主要用于各种数据总汇,对各项数据指标进行分类统计 实例分析 如下所示:是一份销售流水数据,有时间,地区,销售员,商品名称,数量,单价和金额几个字段,如下所示: 现在针对不同的数据汇总需求,可 ...
- 开始进行lammps手册的学习啦,跟着Manual一边翻译一边做吧!(转载)
转载自:http://blog.sina.com.cn/s/blog_64813e370100ngsz.html 注明:黄色部分基本上为不懂的部分,红色字体为所做注释 一.各种文件的介绍: 1 in ...