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 相关文章推荐
分析JVM源码之Thread.interrupt系统级别线程打断
Jun 29 Java/Android
解决Jenkins集成SonarQube遇到的报错问题
Jul 15 Java/Android
springboot 启动如何排除某些bean的注入
Aug 02 Java/Android
SpringBoot实现quartz定时任务可视化管理功能
Aug 30 Java/Android
springboot如何接收application/x-www-form-urlencoded类型的请求
Nov 02 Java/Android
Spring Bean是如何初始化的详解
Mar 22 Java/Android
springboot用户数据修改的详细实现
Apr 06 Java/Android
教你在 Java 中实现 Dijkstra 最短路算法的方法
Apr 08 Java/Android
SpringBoot中获取profile的方法详解
Apr 08 Java/Android
详解Flutter自定义应用程序内键盘的实现方法
Jun 14 Java/Android
Java+swing实现抖音上的表白程序详解
Jun 25 Java/Android
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
Aug 05 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
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
2011/10/23 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
js调用flash的效果代码
2008/04/26 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
JavaScript中this详解
2015/09/01 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
2016/04/17 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
BootStrap入门学习第一篇
2017/08/28 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
vue使用codemirror的两种用法
2019/08/27 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
requests和lxml实现爬虫的方法
2017/06/11 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
Python3几个常见问题的处理方法
2019/02/26 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
python 常见的排序算法实现汇总
2020/08/21 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
教师应聘个人求职信
2013/12/10 职场文书
中专生自我鉴定范文
2014/02/02 职场文书
捐书活动倡议书
2015/04/27 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书