当前位置: 首页 > news >正文

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;@Beforepublic void before() {minioClient = MinioClient.builder().endpoint("http://10.49.196.35:9000").credentials("minioadmin", "minioadmin").build();}@Afterpublic void after() throws Exception {minioClient.close();}/*** 列出桶信息*/@Testpublic void listBuckets() throws Exception {List<Bucket> list = minioClient.listBuckets();for (Bucket bucket : list) {log.info("bucket={}", bucket.name());}}/*** 新建桶*/@Testpublic void makeBucket() throws Exception {minioClient.makeBucket(MakeBucketArgs.builder().bucket("bucket1").build());}/*** 删除桶*/@Testpublic void removeBucket() throws Exception {minioClient.removeBucket(RemoveBucketArgs.builder().bucket("bucket1").build());}/*** 判断桶是否存在*/@Testpublic void bucketExists() throws Exception {boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket("bucket1").build());log.info("exists={}", exists);}/*** 获取桶的标签*/@Testpublic void getBucketTags() throws Exception {Tags tags = minioClient.getBucketTags(GetBucketTagsArgs.builder().bucket("test-bucket").build());log.info("tags={}", tags.get());}/*** 设置桶的标签*/@Testpublic 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());}/*** 删除桶的标签*/@Testpublic void deleteBucketTags() throws Exception {minioClient.deleteBucketTags(DeleteBucketTagsArgs.builder().bucket("test-bucket").build());}/*** 列出桶中的对象信息*/@Testpublic 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());}}/*** 将输入流作为存储桶中的对象上传*/@Testpublic 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());}/*** 上传本地文件到桶*/@Testpublic 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());}/*** 删除桶中对象*/@Testpublic void removeObject() throws Exception {minioClient.removeObject(RemoveObjectArgs.builder().bucket("test-bucket").object("abc/a.png").build());}/*** 批量删除桶中对象*/@Testpublic 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());}}/*** 获取桶中的对象*/@Testpublic 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();}/*** 将桶中对象下载到本地文件*/@Testpublic void downloadObject() throws Exception {minioClient.downloadObject(DownloadObjectArgs.builder().bucket("test-bucket").object("abc/a.png").filename("d:/temp/a.png").build());}/*** 拷贝桶中对象*/@Testpublic 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());}/*** 获取对象的标签*/@Testpublic void getObjectTags() throws Exception {Tags tags = minioClient.getObjectTags(GetObjectTagsArgs.builder().bucket("test-bucket").object("abc/a.txt").build());log.info("tags={}", tags.get());}/*** 设置对象的标签*/@Testpublic 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());}/*** 删除对象的标签*/@Testpublic 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。

http://www.hskmm.com/?act=detail&tid=38849

相关文章:

  • 团队管理
  • DHCP 泛洪攻击小实验
  • 2025年家装电缆工厂权威推荐榜单:光伏电缆/阻燃电缆/电线电缆源头厂家精选
  • 2025年道路裂缝密封胶生产厂家权威推荐榜单:道路专用密封胶/混凝土路面灌缝胶/聚氨酯灌缝胶源头厂家精选
  • 2025 年模板加固源头厂家最新推荐榜:优质企业权威测评出炉,含高精 / 剪力墙等多类型模板加固品牌
  • 102302155张怡旋数据采集第一次作业
  • 2025年人字纹机织布源头厂家权威推荐榜单:700g机织布/锦纶工业用布/800g机织布源头厂家精选
  • 2025年永磁同步变频器加工厂权威推荐榜单:高压变频柜装置/通用矢量变频器/高压变频器源头厂家精选
  • Day4无序,有序和定义列表
  • 刷题日记—数组练习-幻方
  • IT运维工程师的起源与发展
  • JBoltAI:解锁Java团队的AI开发潜能,引领产业数智化升级新浪潮
  • SpringMVC 启动与请求处理流程解析 - Higurashi
  • Java 企业 AI 转型选什么?JBoltAI 框架:20 + 大模型 + 向量数据库,AI 应用超灵活
  • 20232401 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • JBoltAI:企业级 Java AI 应用开发框架
  • 告别 AI 开发 “瞎折腾”!JBoltAI 框架帮 Java 团队提速,AI 应用落地快人一步
  • 软件技术基础第二次作业
  • Log4Net配置文件参考
  • 2025年8座旅游观光车供应商权威推荐榜单:11座旅游观光车/景区观光车/燃油观光车源头厂家精选
  • 2025 年健身器材品牌最新推荐排行榜:权威测评揭晓家用商用高口碑品牌及选购指南商用 / 单位 / 家庭 / 有氧 / 力量健身器材推荐
  • 2025 年最新推荐!工业 / 防爆 / 低温 / 水冷 / 螺杆 / 超低温等多类型冷水机定制厂家榜单,助力企业精准选择高效制冷品牌
  • 2025年红木家具厂家权威推荐榜:交趾黄檀/小叶紫檀/巴里黄檀/缅甸花梨/阔叶黄檀,明清古典榫卯工艺高端定制全屋整装,白胚烘干源头工厂精选
  • 2025年实木家具厂家权威推荐榜:原木/全实木/北美黑胡桃/樱桃木/榫卯工艺高端定制,实木全屋整装,烘干/白胚/木蜡油保养,经典款品质之选
  • 2025年服装厂家推荐排行榜,棒球帽,卫衣,羽绒服,春秋季运动休闲服饰厂家精选
  • 2025年铁氟龙高温线厂家权威推荐榜:极细铁氟龙/UL10064铁氟龙/UL1332铁氟龙/UL1867铁氟龙/UL10064极细铁氟龙/UL1332极细铁氟龙/UL1867极细铁氟龙专业解析
  • 2025年卫衣品牌权威推荐榜:精选纯棉/加绒/oversize/情侣款卫衣源头厂家,潮流与舒适兼备的穿搭首选
  • 详细介绍:2025 年 AI+BI 趋势下,Wyn 商业智能软件如何重构企业决策效率?
  • 2025年小型收卷机生产商权威推荐榜单:收卷机械设备/多功能收卷机/收卷机械源头厂家精选
  • CICD流程建设之持续集成实践指南