MinIO 介绍(4)--Java 操作 MinIO

本文主要介绍使用 Java 客户端来操作 MinIO,文中所使用到的软件版本:MinIO RELEASE.2025-07-23T15-54-02Z、MinIO Java 客户端 8.5.17、Centos 8.5.2111。

1、引入依赖

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

2、Java 客户端来操作 MinIO

2.1、创建 MinIO 客户端

@Before
public void before() {
    minioClient = MinioClient.builder()
            .endpoint("http://10.49.196.35:9000")
            .credentials("minioadmin", "minioadmin")
            .build();
}

2.2、桶操作

2.2.1、列出桶信息

@Test
public void listBuckets() throws Exception {
    List<Bucket> list = minioClient.listBuckets();
    for (Bucket bucket : list) {
        log.info("bucket={}", bucket.name());
    }
}

2.2.2、新建桶

@Test
public void makeBucket() throws Exception {
    minioClient.makeBucket(MakeBucketArgs.builder().bucket("bucket1").build());
}

2.2.3、删除桶

@Test
public void removeBucket() throws Exception {
    minioClient.removeBucket(RemoveBucketArgs.builder().bucket("bucket1").build());
}

2.2.4、判断桶是否存在

@Test
public void bucketExists() throws Exception {
    boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket("bucket1").build());
    log.info("exists={}", exists);
}

2.2.5、获取桶的标签

@Test
public void getBucketTags() throws Exception {
    Tags tags = minioClient.getBucketTags(GetBucketTagsArgs.builder().bucket("test-bucket").build());
    log.info("tags={}", tags.get());
}

2.2.6、设置桶的标签

@Test
public void setBucketTags() throws Exception {
    Map<String, String> map = new HashMap<>();
    map.put("Project", "Project One");
    map.put("User", "jsmith");
    minioClient.setBucketTags(SetBucketTagsArgs.builder().bucket("test-bucket").tags(map).build());
}

2.2.7、删除桶的标签

@Test
public void deleteBucketTags() throws Exception {
    minioClient.deleteBucketTags(DeleteBucketTagsArgs.builder().bucket("test-bucket").build());
}

2.3、对象操作

2.3.1、列出桶中的对象信息

@Test
public void listObjects() throws Exception {
    Iterable<Result<Item>> iterable = minioClient.listObjects(ListObjectsArgs.builder()
            .bucket("test-bucket")
            .prefix("abc")
            .recursive(true)
            .build());
    for (Result<Item> itemResult : iterable) {
        log.info("objectName={}", itemResult.get().objectName());
    }
}

2.3.2、将输入流作为存储桶中的对象上传

@Test
public void putObject() throws Exception {
    InputStream inputStream = new FileInputStream("d:/temp/a.png");
    ObjectWriteResponse objectWriteResponse = minioClient.putObject(PutObjectArgs.builder()
            .bucket("test-bucket")
            .object("abc/a.png")
            .stream(inputStream, -1, 1024 * 1024 * 5).build());
    log.info("object={}", objectWriteResponse.object());
}

2.3.3、上传本地文件到桶

@Test
public void uploadObject() throws Exception {
    ObjectWriteResponse objectWriteResponse = minioClient.uploadObject(UploadObjectArgs.builder()
            .bucket("test-bucket")
            .object("abc/a.png")
            .filename("d:/temp/a.png").build());
    log.info("object={}", objectWriteResponse.object());
}

2.3.4、删除桶中对象

@Test
public void removeObject() throws Exception {
    minioClient.removeObject(RemoveObjectArgs.builder()
            .bucket("test-bucket")
            .object("abc/a.png")
            .build());
}

2.3.5、批量删除桶中对象

@Test
public void removeObjects() throws Exception {
    List<DeleteObject> objects = new ArrayList<>();
    objects.add(new DeleteObject("abc/a.png"));
    objects.add(new DeleteObject("abc/a.txt"));
    Iterable<Result<DeleteError>> iterable = minioClient.removeObjects(RemoveObjectsArgs.builder()
            .bucket("test-bucket")
            .objects(objects)
            .build());
    Iterator<Result<DeleteError>> iterator = iterable.iterator();
    while (iterator.hasNext()) {
        DeleteError deleteError = iterator.next().get();
        log.info("Error in deleting object {}; {}", deleteError.objectName(), deleteError.message());
    }
}

2.3.6、获取桶中的对象

@Test
public void getObject() throws Exception {
    InputStream in = minioClient.getObject(GetObjectArgs.builder()
            .bucket("test-bucket")
            .object("abc/a.png")
            .build());
    OutputStream out = new FileOutputStream("d:/temp/a.png");
    //写出到输出流
    IOUtils.copy(in, out);
    in.close();
    out.close();
}

2.3.7、将桶中对象下载到本地文件

@Test
public void downloadObject() throws Exception {
    minioClient.downloadObject(DownloadObjectArgs.builder()
            .bucket("test-bucket")
            .object("abc/a.png")
            .filename("d:/temp/a.png")
            .build());
}

2.3.8、拷贝桶中对象

@Test
public void copyObject() throws Exception {
    ObjectWriteResponse objectWriteResponse = minioClient.copyObject(CopyObjectArgs.builder()
            .bucket("test-bucket")
            .object("abc/a.txt")
            .source(CopySource.builder()
                    .bucket("source-bucket")
                    .object("xyz/a.txt")
                    .build())
            .build());
    log.info("object={}", objectWriteResponse.object());
}

2.3.9、获取对象的标签

@Test
public void getObjectTags() throws Exception {
    Tags tags = minioClient.getObjectTags(GetObjectTagsArgs.builder()
            .bucket("test-bucket")
            .object("abc/a.txt")
            .build());
    log.info("tags={}", tags.get());
}

2.3.10、设置对象的标签

@Test
public void setObjectTags() throws Exception {
    Map<String, String> map = new HashMap<>();
    map.put("Project", "Project One");
    map.put("User", "jsmith");
    minioClient.setObjectTags(SetObjectTagsArgs.builder()
            .bucket("test-bucket")
            .object("abc/a.txt")
            .tags(map)
            .build());
}

2.3.11、删除对象的标签

@Test
public void deleteObjectTags() throws Exception {
    minioClient.deleteObjectTags(DeleteObjectTagsArgs.builder()
            .bucket("test-bucket")
            .object("abc/a.txt")
            .build());
}

2.4、完整代码

package com.abc.minio;

import io.minio.*;
import io.minio.messages.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.*;

@Slf4j
public class MinioCase {
    private MinioClient minioClient;

    @Before
    public void before() {
        minioClient = MinioClient.builder()
                .endpoint("http://10.49.196.35:9000")
                .credentials("minioadmin", "minioadmin")
                .build();
    }

    @After
    public void after() throws Exception {
        minioClient.close();
    }


    /**
     * 列出桶信息
     */
    @Test
    public void listBuckets() throws Exception {
        List<Bucket> list = minioClient.listBuckets();
        for (Bucket bucket : list) {
            log.info("bucket={}", bucket.name());
        }
    }

    /**
     * 新建桶
     */
    @Test
    public void makeBucket() throws Exception {
        minioClient.makeBucket(MakeBucketArgs.builder().bucket("bucket1").build());
    }

    /**
     * 删除桶
     */
    @Test
    public void removeBucket() throws Exception {
        minioClient.removeBucket(RemoveBucketArgs.builder().bucket("bucket1").build());
    }

    /**
     * 判断桶是否存在
     */
    @Test
    public void bucketExists() throws Exception {
        boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket("bucket1").build());
        log.info("exists={}", exists);
    }

    /**
     * 获取桶的标签
     */
    @Test
    public void getBucketTags() throws Exception {
        Tags tags = minioClient.getBucketTags(GetBucketTagsArgs.builder().bucket("test-bucket").build());
        log.info("tags={}", tags.get());
    }

    /**
     * 设置桶的标签
     */
    @Test
    public void setBucketTags() throws Exception {
        Map<String, String> map = new HashMap<>();
        map.put("Project", "Project One");
        map.put("User", "jsmith");
        minioClient.setBucketTags(SetBucketTagsArgs.builder().bucket("test-bucket").tags(map).build());
    }

    /**
     * 删除桶的标签
     */
    @Test
    public void deleteBucketTags() throws Exception {
        minioClient.deleteBucketTags(DeleteBucketTagsArgs.builder().bucket("test-bucket").build());
    }


    /**
     * 列出桶中的对象信息
     */
    @Test
    public void listObjects() throws Exception {
        Iterable<Result<Item>> iterable = minioClient.listObjects(ListObjectsArgs.builder()
                .bucket("test-bucket")
                .prefix("abc")
                .recursive(true)
                .build());
        for (Result<Item> itemResult : iterable) {
            log.info("objectName={}", itemResult.get().objectName());
        }
    }

    /**
     * 将输入流作为存储桶中的对象上传
     */
    @Test
    public void putObject() throws Exception {
        InputStream inputStream = new FileInputStream("d:/temp/a.png");
        ObjectWriteResponse objectWriteResponse = minioClient.putObject(PutObjectArgs.builder()
                .bucket("test-bucket")
                .object("abc/a.png")
                .stream(inputStream, -1, 1024 * 1024 * 5).build());
        log.info("object={}", objectWriteResponse.object());
    }

    /**
     * 上传本地文件到桶
     */
    @Test
    public void uploadObject() throws Exception {
        ObjectWriteResponse objectWriteResponse = minioClient.uploadObject(UploadObjectArgs.builder()
                .bucket("test-bucket")
                .object("abc/a.png")
                .filename("d:/temp/a.png").build());
        log.info("object={}", objectWriteResponse.object());
    }

    /**
     * 删除桶中对象
     */
    @Test
    public void removeObject() throws Exception {
        minioClient.removeObject(RemoveObjectArgs.builder()
                .bucket("test-bucket")
                .object("abc/a.png")
                .build());
    }

    /**
     * 批量删除桶中对象
     */
    @Test
    public void removeObjects() throws Exception {
        List<DeleteObject> objects = new ArrayList<>();
        objects.add(new DeleteObject("abc/a.png"));
        objects.add(new DeleteObject("abc/a.txt"));
        Iterable<Result<DeleteError>> iterable = minioClient.removeObjects(RemoveObjectsArgs.builder()
                .bucket("test-bucket")
                .objects(objects)
                .build());
        Iterator<Result<DeleteError>> iterator = iterable.iterator();
        while (iterator.hasNext()) {
            DeleteError deleteError = iterator.next().get();
            log.info("Error in deleting object {}; {}", deleteError.objectName(), deleteError.message());
        }
    }

    /**
     * 获取桶中的对象
     */
    @Test
    public void getObject() throws Exception {
        InputStream in = minioClient.getObject(GetObjectArgs.builder()
                .bucket("test-bucket")
                .object("abc/a.png")
                .build());
        OutputStream out = new FileOutputStream("d:/temp/a.png");
        //写出到输出流
        IOUtils.copy(in, out);
        in.close();
        out.close();
    }

    /**
     * 将桶中对象下载到本地文件
     */
    @Test
    public void downloadObject() throws Exception {
        minioClient.downloadObject(DownloadObjectArgs.builder()
                .bucket("test-bucket")
                .object("abc/a.png")
                .filename("d:/temp/a.png")
                .build());
    }

    /**
     * 拷贝桶中对象
     */
    @Test
    public void copyObject() throws Exception {
        ObjectWriteResponse objectWriteResponse = minioClient.copyObject(CopyObjectArgs.builder()
                .bucket("test-bucket")
                .object("abc/a.txt")
                .source(CopySource.builder()
                        .bucket("source-bucket")
                        .object("xyz/a.txt")
                        .build())
                .build());
        log.info("object={}", objectWriteResponse.object());
    }


    /**
     * 获取对象的标签
     */
    @Test
    public void getObjectTags() throws Exception {
        Tags tags = minioClient.getObjectTags(GetObjectTagsArgs.builder()
                .bucket("test-bucket")
                .object("abc/a.txt")
                .build());
        log.info("tags={}", tags.get());
    }

    /**
     * 设置对象的标签
     */
    @Test
    public void setObjectTags() throws Exception {
        Map<String, String> map = new HashMap<>();
        map.put("Project", "Project One");
        map.put("User", "jsmith");
        minioClient.setObjectTags(SetObjectTagsArgs.builder()
                .bucket("test-bucket")
                .object("abc/a.txt")
                .tags(map)
                .build());
    }

    /**
     * 删除对象的标签
     */
    @Test
    public void deleteObjectTags() throws Exception {
        minioClient.deleteObjectTags(DeleteObjectTagsArgs.builder()
                .bucket("test-bucket")
                .object("abc/a.txt")
                .build());
    }
}
MinioCase.java

 

 

 

参考:https://min-io.cn/docs/minio/linux/developers/java/minio-java.html

posted @ 2025-10-25 15:33  且行且码  阅读(120)  评论(0)    收藏  举报