SpringBoot整合Minio文件存储


Posted in Java/Android onApril 03, 2022

背景

公司的开发框架集成了附件本地存储,阿里云,华为云等,现项目有要求附件存储与应用部署环境不能是同一台服务器,也不能使用云存储,经过技术选型后决定框架整合minio,将minio部署在另一台服务器开通外网端口即可解决问题

Minio安装部署

下载minio安装部署包,创建对应配置文件,这里提供一个整合后的压缩包

下载地址:https://download.csdn.net/download/u013407099/45602196

创建minioData文件夹作为文件存储路径,解压安装包根据放置路径修改对应配置文件文件

minio-service.xml和run.bat

<service>
  <id>minio</id>
  <name>MinIO Service</name>
  <description>MinIO is a High Performance Object Storage</description>
  <logpath>D:\minio\logs</logpath>
  <log mode="roll-by-size">
    <sizeThreshold>10240</sizeThreshold>
    <keepFiles>8</keepFiles>
  </log>
  <executable>D:\minio\run.bat</executable>
</service>
set MINIO_ACCESS_KEY=admin
set MINIO_SECRET_KEY=abcd@1234
minio.exe server -address :9999 D:\minioData

解压部署包后cmd进入对应解压路径,输入命令minio.exe server D:\minioData 初始化后关闭cmd命令

使用服务安装工具安装服务,选择minio-service.exe

windows服务安装工具下载地址:https://download.csdn.net/download/u013407099/45603714

启动服务后访问 http://127.0.0.1:9999/

用户名:admin 密码:abcd@1234 (端口及账户密码都是在run.bat文件中配置的)

进入系统创建bucket用于存储文件(类似于阿里云)

SpringBoot整合Minio文件存储

配置pom文件--h2>

<dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>7.1.0</version>
        </dependency>

配置yml文件

这里分别配置上传/下载地址是正式项目可能配置外网端口后,服务器中不能访问对应的外网端口,上传走内网,下载走外网

#minio配置
  # 上传地址
  minio_uploadurl: http://192.168.1.42:9999/
  # 下载地址
  minio_downloadurl: http://192.168.1.42:9999/
  # 账户
  minio_accesskey: admin
  # 密码
  minio_secrectkey: abcd@1234
  # 存储文件夹
  minio_bucknetname: xxx

Minio工具类

初始化client

public MinioClient InitMinio() {
        MinioClient minioClient = MinioClient.builder().
        endpoint(frameConfig.getMinio_uploadurl()).       		        credentials(frameConfig.getMinio_accesskey(),frameConfig.getMinio_secrectkey()).build();
        try{
            boolean isExist = minioClient.bucketExists(frameConfig.getMinio_bucknetname());
            if (!isExist) {
                minioClient.makeBucket(frameConfig.getMinio_bucknetname());
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return minioClient;
    }

上传文件

getkey方法只是指定对应的自定义存储路径

指定content-type是为了浏览器能打开附件时,图片和pdf等文件能够在线浏览

不指定默认都是stream,打开文件统一为下载

public boolean uploadMinioFile(InputStream stream, AttachmentDO attachmentDO,String contentType){
        boolean result = true;
        try{
            MinioClient minioClient = InitMinio();
            String bucketName =frameConfig.getMinio_bucknetname();
            PutObjectOptions option = new PutObjectOptions(stream.available(), -1);
            option.setContentType(contentType);
            minioClient.putObject(bucketName,getKey(attachmentDO),stream,option);
        }catch (Exception e){
            logger.error("Minio上传文件失败:" + e.getMessage());
            result = false;
        }
        return result;
    }

下载文件

需要注意的是,生成的文件下载地址是和MinioClient中指定的服务器地址绑定的,使用nginx代理后是无效的

public  String readMinioCommonFile(AttachmentDO attachmentDO){
        String fileurl = "";
        try{
            MinioClient minioClient = InitMinio();
            String bucketName =frameConfig.getMinio_bucknetname();
            return minioClient.presignedGetObject(bucketName, getKey(attachmentDO));
        }catch (Exception e){
            logger.error("Minio读取文件失败:" + e.getMessage());
        }
        return fileurl;
    }

删除文件

public  boolean deleteMinioFile(AttachmentDO attachmentDO){
        boolean result = true;
        try{
            MinioClient minioClient = InitMinio();
            String bucketName =frameConfig.getMinio_bucknetname();
            minioClient.removeObject(bucketName,getKey(attachmentDO));
        }catch (Exception e){
            logger.error("Minio删除文件失败:" + e.getMessage());
            result = false;
        }
        return result;
    }

 

Java/Android 相关文章推荐
详解java如何集成swagger组件
Jun 21 Java/Android
启动Tomcat时出现大量乱码的解决方法
Jun 21 Java/Android
SpringCloud的JPA连接PostgreSql的教程
Jun 26 Java/Android
Jackson 反序列化时实现大小写不敏感设置
Jun 29 Java/Android
解决ObjectMapper.convertValue() 遇到的一些问题
Jun 30 Java/Android
Spring mvc是如何实现与数据库的前后端的连接操作的?
Jun 30 Java/Android
新手初学Java网络编程
Jul 07 Java/Android
Spring中的使用@Async异步调用方法
Nov 01 Java/Android
Spring事务管理下synchronized锁失效问题的解决方法
Mar 31 Java/Android
Spring Data JPA框架Repository自定义实现
Apr 28 Java/Android
Springboot中如何自动转JSON输出
Jun 16 Java/Android
Java Spring Boot请求方式与请求映射过程分析
Jun 25 Java/Android
Java中Quartz高可用定时任务快速入门
Apr 03 #Java/Android
Spring Security使用单点登录的权限功能
Spring Boot 底层原理基础深度解析
Java 超详细讲解数据结构中的堆的应用
Java 数据结构七大排序使用分析
Java基础——Map集合
Apr 01 #Java/Android
Android基于Fresco实现圆角和圆形图片
Apr 01 #Java/Android
You might like
用php或asp创建网页桌面快捷方式的代码
2010/03/23 PHP
php 上传文件类型判断函数(避免上传漏洞 )
2010/06/08 PHP
php实现的ping端口函数实例
2014/11/12 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
深入学习JavaScript中的Rest参数和参数默认值
2015/07/28 Javascript
Ajax基础知识详解
2017/02/17 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
详解Nodejs之npm&amp;package.json
2017/06/15 NodeJs
AngularJS日程表案例详解
2017/08/15 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
vue实现点击按钮下载文件功能
2019/10/11 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
Python实现JSON反序列化类对象的示例
2018/01/31 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
python程序输出无内容的解决方式
2020/04/09 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
全球性的在线鞋类品牌:Public Desire
2019/04/03 全球购物
eBay美国官网:eBay.com
2020/10/24 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
个人求职信范例
2014/01/29 职场文书
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
企业后勤岗位职责
2014/02/28 职场文书
《小鹰学飞》教学反思
2014/04/23 职场文书
国旗下演讲稿
2014/05/08 职场文书
环保建议书400字
2014/05/14 职场文书
音乐教师个人总结
2015/02/06 职场文书
Python如何把不同类型数据的json序列化
2021/04/30 Python