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()); } }
参考:https://min-io.cn/docs/minio/linux/developers/java/minio-java.html。
浙公网安备 33010602011771号