JAVA使用 MinIO Java SDK

JAVA使用 MinIO Java SDK

1. 添加依赖

在使用 MinIO Java SDK 之前,你需要在你的java项目中添加对应的依赖。如果你使用的是 Maven,那么可以在 pom.xml 中添加如下依赖:

<dependency>
  <groupId>io.minio</groupId>
  <artifactId>minio</artifactId>
  <version>8.2.2</version>
</dependency>

如果使用的是 Gradle,那么可以在 build.gradle 中添加:

implementation 'io.minio:minio:8.2.2'

2. 在minio中创建accessKey和secretKey

以下方式选择一种创建accessKey和secretKey

方式一:

使用管理员账户 初始管理员 Access Key 和 Secret
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方式二:

创建新用户:
在用户管理界面,点击“Create User”按钮。
输入新用户的用户名。
分配权限:
在创建用户时,可以选择为用户分配特定的策略(Policy),例如“只读”或“完全访问”。
创建用户后,点击“Create”保存。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3.创建桶

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.结合springboot实现文件上传

  1. 使用 Spring Boot 的 @ConfigurationProperties 注解来自动绑定配置属性到一个 Java 类中
  2. 配置yml(注意配置bucketName需要配置与创建得桶名字相同 例如:bucketName: public-test
  3. 注入MinioClient 客户端
  4. 实现文件上传
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioPropertiesConfig {

    /** 客户端连接到 MinIO 服务器的 URL */
    private String endpoint;

    /** accessKey */
    private String accessKey;

    /** secretKey */
    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;
    }
}

yml配置

# minio相关配置
minio:
  # minio地址+端口号
  endpoint: http://localhost:9000
  # minio用户名
  accessKey: kFlZJ9ejkyDWOrluvhoj
  # minio密码
  secretKey: KAPLLdt8JcSNidRRWpF989OfBMCcPbrN4MuHMKTt
  # 存储桶名称
  bucketName: public-test

注入MinioClient

@Configuration
public class MinioConfig {

    @Autowired
    private MinioPropertiesConfig minioProperties;


    @Bean
    public MinioClient minioClient(){
        MinioClient minioClient = MinioClient.builder().
                endpoint(minioProperties.getEndpoint()).
                credentials(minioProperties.getAccessKey(), 
                minioProperties.getSecretKey()).
                build();
        return minioClient;
    }

}

controller代码

    @Autowired
    private MinioClient minioClient;

    @Autowired
    private MinioPropertiesConfig minioPropertiesConfig;
    @PostMapping("/test")
    public String test(MultipartFile file) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
        Date date = new Date(System.currentTimeMillis());
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String format = dateFormat.format(date);
        
        String uuid = UUID.randomUUID().toString();

       // 构建文件名,格式为 日期/UUID@原始文件名。
        // 例如:2024-09-01/123e4567-e89b-12d3-a456-426614174000@example.txt。
        String fileName = format+"/"+uuid+"@"+file.getOriginalFilename();

        InputStream inputStream = file.getInputStream();
        minioClient.putObject(
                PutObjectArgs.builder()
                        .bucket(minioPropertiesConfig.getBucketName())
                        .object(fileName)
                        .stream(inputStream, file.getSize(), -1)
                        .contentType(file.getContentType())
                        .build()
        );


        inputStream.close();
        return minioPropertiesConfig.getEndpoint()+"/"+
                minioPropertiesConfig.getBucketName()+"/"+fileName;
    }

在这里插入图片描述

付一些常用方法:也可参考官网:https://min.io/docs/minio/linux/developers/java/minio-java.html

判断桶是否存在不存在创建创建桶

// 检查指定的存储桶是否存在于 MinIO 服务器上
boolean b = minioClient.bucketExists(
    BucketExistsArgs.builder()
        .bucket("test")  // 指定存储桶名称
        .build()
);

// 如果存储桶不存在,则创建该存储桶
if (!b) {
    minioClient.makeBucket(
        MakeBucketArgs.builder()
            .bucket("test")  // 指定存储桶名称
            .build()
    );
}

MinIO 客户端上传一个本地文件到 MinIO 服务器

minioClient.uploadObject(
    UploadObjectArgs.builder()
        .bucket("my-bucketname")  // 指定存储桶名称
        .object("my-objectname")  // 指定对象名称
        .filename("C://my-video.avi")  // 指定本地文件路径
        .contentType("video/mp4")  // 指定内容类型
        .build()  // 构建最终的 UploadObjectArgs 对象
);

常见问题

  1. tomcat 删除临时文件失败,原因是没有正常关闭流导致

在这里插入图片描述
在这里插入图片描述

Java使用Minio存储文件可以通过Minio提供的Java SDK来实现。Minio是一个开源的分布式对象存储服务,可以用于存储和检索大量的数据,同时也支持并发上传、下载、合并、删除等操作。下面是一个使用Minio存储文件的示例代码: 1. 首先需要引入MinioJava SDK依赖: ``` <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>RELEASE.2021-06-17T22-56-34Z</version> </dependency> ``` 2. 创建Minio客户端并连接到Minio服务器: ``` String endpoint = "http://minio.example.com"; String accessKey = "ACCESS_KEY"; String secretKey = "SECRET_KEY"; MinioClient minioClient = new MinioClient.Builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); ``` 3. 创建一个存储桶(Bucket): ``` String bucketName = "java.minio.demo"; boolean bucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); if (!bucketExists) { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } ``` 4. 上传文件到Minio服务器: ``` File file = new File("D:\DownUpLoadTempFiles\100元.jpg"); InputStream inputStream = new FileInputStream(file); String objectName = "100元.jpg"; minioClient.putObject(PutObjectArgs.builder() .bucket(bucketName) .object(objectName) .stream(inputStream, inputStream.available(), -1) .build()); ``` 5. 下载文件: ``` String objectName = "100元.jpg"; File file = new File("D:\DownUpLoadTempFiles\100元.jpg"); minioClient.downloadObject(DownloadObjectArgs.builder() .bucket(bucketName) .object(objectName) .filename(file.getAbsolutePath()) .build()); ``` 6. 删除文件: ``` String objectName = "100元.jpg"; minioClient.removeObject(RemoveObjectArgs.builder() .bucket(bucketName) .object(objectName) .build()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值