乐趣区

关于springboot:SpringBoot整合Minio文件存储

背景

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

Minio 装置部署

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

下载地址:https://download.csdn.net/dow…

创立 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/dow…

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

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

进入零碎创立 bucket 用于存储文件(相似于阿里云)

配置 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;
    }
退出移动版