首页 > 编程语言 >Java中的MinIO应用类--版本2

Java中的MinIO应用类--版本2

时间:2024-01-24 11:01:20浏览次数:23  
标签:Java MinIO -- return bucketName io import public String


1. 配置类

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import io.minio.MinioClient;


@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {
  /**
   * 服务地址
   */
  private String endpoint;

  /**
   * 用户名
   */
  private String accessKey;

  /**
   * 密码
   */
  private String secretKey;

  /**
   * 存储桶名称
   */
  private String bucketName;

  public String getEndpoint() {
    return endpoint;
  }

  public void setEndpoint(String endpoint) {
    this.endpoint = endpoint;
  }

  public String getAccessKey() {
    return accessKey;
  }

  public void setAccessKey(String accessKey) {
    this.accessKey = accessKey;
  }

  public String getSecretKey() {
    return secretKey;
  }

  public void setSecretKey(String secretKey) {
    this.secretKey = secretKey;
  }

  public String getBucketName() {
    return bucketName;
  }

  public void setBucketName(String bucketName) {
    this.bucketName = bucketName;
  }

  @Bean
  public MinioClient getMinioClient() {
    return MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
  }

}



2.应用类

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import io.minio.BucketExistsArgs;
import io.minio.DownloadObjectArgs;
import io.minio.GetPresignedObjectUrlArgs;
import io.minio.ListObjectsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.RemoveBucketArgs;
import io.minio.RemoveObjectArgs;
import io.minio.Result;
import io.minio.StatObjectArgs;
import io.minio.StatObjectResponse;
import io.minio.http.Method;
import io.minio.messages.Item;

@Component
public class MinioTemplate {

  @Autowired
  private MinioClient minioClient;

  public MinioTemplate() {}

  // bucket是否存在
  public Boolean bucketExists(String bucketName) {
    Boolean found;
    try {
      found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
    } catch (Exception e) {
      e.printStackTrace();
      return false;
    }
    return found;
  }

  // 创建存储bucket
  public Boolean createBucket(String bucketName) throws Exception {
    try {
      minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
    } catch (Exception e) {
      e.printStackTrace();
      return false;
    }
    return true;
  }

  // 删除存储bucket
  public Boolean removeBucket(String bucketName) {
    try {
      minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
    } catch (Exception e) {
      e.printStackTrace();
      return false;
    }
    return true;
  }

  // 获取全部bucket
  public List<String> getAllBuckets() {
    try {
      List<String> buckets = minioClient.listBuckets().stream().map(item -> item.name()).collect(Collectors.toList());
      return buckets;
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }

  // 文件上传
  public String putObject(String bucketName, String objectName, File file, String contextType) {
    FileInputStream fileInputStream = null;
    try {
      if (!file.exists() || !file.isFile()) {
        throw new Exception(" file is invalid");
      }
      fileInputStream = new FileInputStream(file);
      contextType = StringUtils.isNotBlank(contextType) ? contextType : "application/octet-stream";
      PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(fileInputStream, file.getTotalSpace(), -1).contentType(contextType).build();
      // 文件名称相同覆盖
      minioClient.putObject(objectArgs);
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
    return objectName;
  }

  // 文件上传
  public String putObject(String bucketName, String objectName, InputStream stream) {

    try {
      PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(stream, stream.available(), -1).contentType("application/octet-stream").build();
      // 文件名称相同覆盖
      minioClient.putObject(objectArgs);
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
    return objectName;
  }

  // 生成远程访问URL
  public String getObjectURL(String bucketName, String fileName, int expires) { //
    // 查看文件地址
    GetPresignedObjectUrlArgs presignedObject = new GetPresignedObjectUrlArgs().builder().bucket(bucketName).object(fileName).expiry(expires).method(Method.GET).build();
    try {
      String url = minioClient.getPresignedObjectUrl(presignedObject);
      return url;
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
  

  // 下载到本地
  public void localDownload(String bucketName, String objectName, String filePath) {
    try {
      StatObjectResponse response = minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
      if (response != null) {
        minioClient.downloadObject(DownloadObjectArgs.builder().bucket(bucketName).object(objectName).filename(filePath).build());
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  // 查看文件对象
  public List<String> listObjects(String bucketName) {
    Iterable<Result<Item>> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());
    List<String> objectList = new ArrayList<>();
    try {
      for (Result<Item> result : results) {
        Item item = result.get();
        if (!item.isDeleteMarker() && !item.isDir()) {
          objectList.add(item.objectName());
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
    return objectList;
  }

  // 删除文件
  public boolean remove(String bucketName, String objectName) {
    try {
      minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());
    } catch (Exception e) {
      e.printStackTrace();
      return false;
    }
    return true;
  }

}

标签:Java,MinIO,--,return,bucketName,io,import,public,String
From: https://www.cnblogs.com/gispathfinder/p/17984148

相关文章

  • MarkDown学习
    Markdown学习标题三级标题四级标题字体hello,World!引用选择狂神说java分割线图片![截图](C:\Users\chenk\Pictures\Screenshots\屏幕截图2024-01-24070616.png)超链接[点击跳转到](博客园-搜索(bing.com))列表ACABC​表格......
  • Java工具类强推:Hutool
    官方文档:https://www.hutool.cn/docs/#/Github地址:https://github.com/dromara/hutoolGitee地址:https://gitee.com/dromara/hutool❓背景灵魂拷问1:还在为新项目工具类搬迁而烦恼?灵魂拷问2:还在为项目中工具类维护而烦恼?......
  • centos7.6使用docker搭建dnf私服
    服务端:1:配置SWAP虚拟内存1.1查看虚拟内存swapon--show1.2创建SWAP#创建一个文件并设置为swapfallocate-l8G/swapfilechmod600/swapfilemkswap/swapfileswapon/swapfilenano/etc/fstab#在最后一行粘贴以下内容,然后按Crtl+X,再按Y,然后回车/swap......
  • MinIO应用类
    1.配置类importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importio.minio.MinioClient;@Configuration@Configuration......
  • MarkDown基础及表格、KaTeX公式、矩阵、流程图、UML图、甘特图语法
    概述最多可设置6级标题技巧列表有序列表MD语法:1.你好2.我也好呈现效果:你好我也好无序列表MD语法:-a-b*aa*bb+aaa+bbb效果:abaabbaaabbb结论,支持三种方式:-、*、+TODO列表MD语法:-[x]后端接口开发-[]与前端联调呈现效果:后端......
  • SysML理论知识
    概述由来长期以来系统工程师使用的建模语言、工具和技术种类很多,如行为图、IDEF0、N2图等,这些建模方法使用的符号和语义不同,彼此之间不能互操作和重用。系统工程正是由于缺乏一种强壮的标准的建模语言,从而限制系统工程师和其他学科之间关于系统需求和设计的有效通信,影响系统工程......
  • JAVA学习笔记--输出HelloWorld
    HelloWorld!写出人生第一个代码~随便新建一个文件夹用于存放代码新建一个Java文件新建一个名为Hello的txt文件或其他文本文件,将后缀名改为.java注意:如果系统没有显示文件后缀名,则需要手动打开在Hello.java文件中编写以下代码:publicclassHello{ publicstaticvoi......
  • C# Switch 语句进阶:模式匹配详解与实例演示
     在C#中,switch语句的模式匹配在C#7.0及以上版本中引入。以下是switch语句中常见的模式及其使用方法的示例:1.类型模式:优点: 用于检查对象的运行时类型,使代码更具可读性。publicstaticstringGetObjectType(objectobj){switch(obj){caseinti:......
  • UniApp Vue3 动态表单
    左侧手机部分为动态表单内容,右侧为提交后获取到表单的值。页面代码:<viewstyle="margin:15px;padding:10rpx;"><tn-formlabel-position="top"ref="formRef":model="formData":rules="formRules"><tn-for......
  • [CSS]SCSS基本用法
    1.声明变量的符号$2.默认变量!default默认变量在值后面加上!default3.变量调用4.局部变量和全局变量5.嵌套 选择器嵌套、属性嵌套、伪类嵌套6.混合宏@mixin声明混合宏,@include调用混合宏 (理解:写了个方法) 不足:编译的时候会根据不同选择器分别编译,形成冗余......