SpringBoot中整合Minio文件存储的安装部署过程

作者:code2roc 时间:2022-02-21 01:28:14 

背景

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

Minio安装部署

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

下载地址:http://xiazai.jb51.net/202204/yuanma/minio_jb51.rar

创建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服务安装工具下载地址:http://xiazai.jb51.net/202204/yuanma/windowsfuwu_jb51.rar

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

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

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

SpringBoot中整合Minio文件存储的安装部署过程

配置pom文件

<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;
   }

来源:https://blog.csdn.net/u013407099/article/details/121440412

标签:SpringBoot,Minio,文件存储
0
投稿

猜你喜欢

  • 通过图例了解PowerDesigner使用方法

    2021-06-05 23:16:24
  • android中UI主线程与子线程深入分析

    2022-02-06 15:19:25
  • C#条件语句、循环语句(if、while)

    2023-09-27 19:49:23
  • java调用回调机制详解

    2023-11-14 21:53:21
  • Java Swing中JTable渲染器与编辑器用法示例

    2022-11-02 09:23:13
  • Unity实现文本转贴图

    2022-05-10 19:53:04
  • SpringBoot 配置文件加密的步骤

    2023-10-23 02:55:55
  • C#实现简化QQ聊天窗口

    2023-01-18 19:01:20
  • Spring初始化与销毁顺序案例演示详解

    2021-06-08 14:33:10
  • Spring MVC4.1服务器端推送实现过程解析

    2021-07-24 14:53:16
  • java中ThreadLocal的基本原理

    2022-03-28 01:13:44
  • Spring Boot 2.0 配置属性自定义转换的方法

    2021-10-18 12:07:44
  • JDBC实现学生管理系统

    2023-01-22 13:22:19
  • Spring Boot 项目发布到 Tomcat 服务器的操作步骤

    2023-10-28 09:39:05
  • 完整详解Java开发学习路线指南

    2023-05-13 08:34:35
  • android保存Bitmap图片到指定文件夹示例

    2022-10-11 22:59:14
  • C#如何删除指定文件或文件夹

    2022-06-30 21:28:49
  • C# Winform实现自定义漂亮的通知效果

    2021-08-10 08:15:29
  • MyBatis中resultType和parameterType和resultMap使用总结

    2023-04-01 05:43:42
  • 解决eclipse启动tomcat时不能加载web项目的问题

    2023-11-15 14:45:01
  • asp之家 软件编程 m.aspxhome.com