美文网首页
SpringBoot整合Minio文件存储

SpringBoot整合Minio文件存储

作者: code2roc | 来源:发表于2021-11-20 15:48 被阅读0次

    背景

    公司的开发框架集成了附件本地存储,阿里云,华为云等,现项目有要求附件存储与应用部署环境不能是同一台服务器,也不能使用云存储,经过技术选型后决定框架整合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用于存储文件(类似于阿里云)

    image

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

    相关文章

      网友评论

          本文标题:SpringBoot整合Minio文件存储

          本文链接:https://www.haomeiwen.com/subject/enxutrtx.html