Minio下载使用并整合springboot

minio:高性能的分布式对象存储

以windos为例:进入官网下载-> 链接:

中文官网http://www.minio.org.cn/download.shtml#/windows
英文官网链接: https://min.io/download#/kubernetes

1.在文件位置打开命令行中启动服务 D:\java\MinioData

在这里插入图片描述2.可打开minio地址访问并操作。用户名和密码默认为:minioadmin
在这里插入图片描述
在这里插入图片描述

整合spring boot创建箱子进行操作(文件夹)

//添加pom依赖
<!--        Minio-->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>*</version>
        </dependency>

配置minio

@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {

//    主机地址
    private String endpoint;
//    端口号
    private int port;
//    用户名
    private String accessKey;
    //密码
    private String secretKey;
//minio中的文件夹名称
    private String bucketName;
    //安全
    private Boolean secure;

    @Bean
    public MinioClient minioClient(){  
    //minio客户端
        MinioClient minioClient=MinioClient.builder().endpoint(endpoint,port,secure)
                .credentials(accessKey,secretKey).build();
        return minioClient;
    }
}

注:如 @ConfigurationProperties(prefix = “minio”) 无效,尝试添加依赖:

<!--        注解处理器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

YML配置minio主机信息

minio:
  endpoint: 127.0.0.1
  port: 9100
  accessKey: minioadmin
  secretKey: minioadmin
  bucketName: demo
  secure: false

此时,minio已完成配置
:使用minio进行操作
创建minio工具类,进行方法的封装,方便后续操作


@Component
public class MinioUtils {
    @Resource
    MinioClient minioClient; //注入配置的客户端
    @Resource
    MinioConfig minioConfig; //读取minio YML配置文件内容
    //判断通  是否要创建
    @SneakyThrows
    public boolean bucketExists(String bucketName) {
        boolean flag;
        flag=minioClient.bucketExists(BucketExistsArgs
        .builder().bucket(bucketName).build());
        return flag;
    }

    //创建桶
    @SneakyThrows
    public void makeBucket(String bucketName) {
        boolean flag = bucketExists(bucketName);
        if (!flag) { //true
        minioClient.makeBucket(MakeBucketArgs
        .builder().bucket(bucketName).build());
        }
    }
    
    /*封装
    *返回桶名字,如果不输入,则使用默认配置的桶名称
    *return :String(bucketName)
    */
    public String getBucketName(String bucketName){
      bucketName= 
      StringUtils.isNotBlank(bucketName)?bucketName:minioConfig.getBucketName();
       //如果输入新的名称,则创建新的bucket
       if (!minioUtils.bucketExists(bucketName)){
            minioUtils.makeBucket(bucketName);
        }
        return bucketName; 
    }
    

    /*上传文件
    * */
    @SneakyThrows
  public void putObject(MultipartFile file,String bucketName,String objectName){
    //调用 getBucketName()判断:是否使用新的文件夹,不写则使用默认
        bucketName = getBucketName(bucketName);
        InputStream inputStream = file.getInputStream(); //文件流
        minioClient.putObject(PutObjectArgs.builder() //使用minio客户端put方法
                .bucket(bucketName) //桶名称
                .object(objectName) //文件名称
                .stream(inputStream,file.getSize(),-1) 
                .contentType(file.getContentType())
                .build());
        inputStream.close();
    }

  /*清空文件夹下的所有文件
  *先获取文件夹名称,然后遍历所有文件删除
  */
    @SneakyThrows
    public void removeAllBucket(String bucketName){
        Iterable<Result<Item>> results = 
        minioClient.listObjects(ListObjectsArgs
        .builder()
        .bucket(bucketName)
        .recursive(true).build());
        //遍历所有文件
        Iterator<Result<Item>> iterator = results.iterator();
        while (iterator.hasNext()) {
            minioClient.removeObject(RemoveObjectArgs
            .builder()
            .bucket(bucketName)
            .object(iterator.next().get().objectName()) //循环得到的所有文件名
            .build());
        }
    }
    //文件预览
    //返回预览链接
        @SneakyThrows
    public String preview(String bucketName,String fileName){
   
          bucketName = getBucketName(bucketName);
            try {
             String ObjectUrl = 
             minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs
             .builder()
             .method(Method.GET)
             .bucket(bucketName)
             .object(fileName).expiry(7 * 24 * 3600) //预览可用时间
             .build());
                return ObjectUrl;
            }catch (Exception e){
                return e.getMessage();
            }
      }
}

以上就是常用方法,更多请研究minio客户端提供方法
个人总结,仅供参考,如有不足,请指出

当将MinIOSpring Boot集成时,您可以使用MinIO Java客户端库来与MinIO对象存储系统进行交互。以下是一些步骤可以帮助您开始整合: 1. 首先,您需要在Spring Boot项目的依赖项中添加MinIO Java客户端库。在您的`pom.xml`文件中添加以下依赖项: ```xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.0.6</version> </dependency> ``` 2. 创建一个配置类来配置MinIO连接和操作。在您的Spring Boot项目中创建一个名为`MinioConfig`的类,并添加以下代码: ```java @Configuration public class MinioConfig { @Value("${minio.accessKey}") private String accessKey; @Value("${minio.secretKey}") private String secretKey; @Value("${minio.endpoint}") private String endpoint; @Bean public MinioClient minioClient() { return MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } } ``` 在上面的代码中,我们使用`@Value`注解从配置文件中获取MinIO的访问密钥、秘钥和端点信息,并创建一个`MinioClient` bean。 3. 在需要使用MinIO的地方注入`MinioClient`并进行操作。例如,如果您想上传文件到MinIO,可以创建一个服务类并注入`MinioClient`,然后编写上传文件的方法: ```java @Service public class MinioService { private final MinioClient minioClient; public MinioService(MinioClient minioClient) { this.minioClient = minioClient; } public void uploadFile(String bucketName, String objectName, String filePath) { try { minioClient.uploadObject(UploadObjectArgs.builder() .bucket(bucketName) .object(objectName) .filename(filePath) .build()); System.out.println("File uploaded successfully"); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们通过注入的`MinioClient`对象调用`uploadObject`方法来上传文件。 这只是一个简单的示例,您可以根据您的需求进一步扩展和使用MinIO的其他功能。 请确保在`application.properties`或`application.yml`配置文件中提供正确的MinIO连接信息,例如: ``` minio.accessKey=your_access_key minio.secretKey=your_secret_key minio.endpoint=http://localhost:9000 ``` 这是一个基本的MinIOSpring Boot集成示例。您可以根据您的具体需求和业务逻辑进行进一步的开发和调整。希望对您有所帮助!如果还有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值