MinIO 提供了一系列 Java API,用于操作对象存储,比如 文件上传、下载、删除、获取文件 URL、管理存储桶等。下面是 MinIO Java SDK 的 常见 API,并附上了示例代码。
1️⃣ 连接 MinIO
MinioClient minioClient = MinioClient.builder()
.endpoint("http://localhost:9000") // MinIO 服务器地址
.credentials("admin", "password") // 账号 & 密码
.build();
✅ 作用:
-
连接 MinIO 服务器,所有操作都基于
MinioClient
。
2️⃣ 存储桶操作
📌 2.1 检查存储桶是否存在
boolean exists = minioClient.bucketExists(BucketExistsArgs.builder()
.bucket("my-bucket").build());
System.out.println("存储桶是否存在: " + exists);
✅ 作用:
-
检查是否存在
my-bucket
,如果不存在,可以创建。
📌 2.2 创建存储桶
minioClient.makeBucket(MakeBucketArgs.builder()
.bucket("my-bucket")
.build());
✅ 作用:
-
创建
my-bucket
存储桶(如果不存在)。
📌 2.3 删除存储桶
minioClient.removeBucket(RemoveBucketArgs.builder()
.bucket("my-bucket")
.build());
✅ 作用:
-
删除存储桶,前提是 存储桶必须为空,否则无法删除。
3️⃣ 文件操作
📌 3.1 上传文件
minioClient.putObject(PutObjectArgs.builder()
.bucket("my-bucket")
.object("test.txt") // MinIO 里的文件名
.stream(new FileInputStream("D:/test.txt"),
new File("D:/test.txt").length(), -1)
.contentType("text/plain") // 指定文件类型
.build());
✅ 作用:
-
将本地文件
D:/test.txt
上传到my-bucket
,并存为test.txt
。
📌 3.2 下载文件
InputStream inputStream = minioClient.getObject(GetObjectArgs.builder()
.bucket("my-bucket")
.object("test.txt")
.build());
Files.copy(inputStream, Paths.get("D:/downloaded-test.txt"),
StandardCopyOption.REPLACE_EXISTING);
✅ 作用:
-
下载 MinIO 里的
test.txt
并保存到D:/downloaded-test.txt
。
📌 3.3 删除文件
minioClient.removeObject(RemoveObjectArgs.builder()
.bucket("my-bucket")
.object("test.txt")
.build());
✅ 作用:
-
删除
my-bucket
里的test.txt
文件。
📌 3.4 获取文件 URL(预览文件)
String url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
.bucket("my-bucket")
.object("test.txt")
.method(Method.GET)
.build());
System.out.println("文件预览 URL: " + url);
✅ 作用:
-
生成
test.txt
的访问 URL,浏览器可直接打开该 URL 预览文件。
4️⃣ 获取文件信息
📌 4.1 获取文件元数据
StatObjectResponse stat = minioClient.statObject(StatObjectArgs.builder()
.bucket("my-bucket")
.object("test.txt")
.build());
System.out.println("文件大小: " + stat.size());
System.out.println("文件类型: " + stat.contentType());
✅ 作用:
-
获取
test.txt
的大小、类型等元数据。
📌 4.2 列出存储桶里的所有文件
Iterable<Result<Item>> files = minioClient.listObjects(ListObjectsArgs.builder()
.bucket("my-bucket")
.build());
for (Result<Item> result : files) {
System.out.println("文件名:" + result.get().objectName());
}
✅ 作用:
-
列出
my-bucket
里的所有文件。
5️⃣ 设置文件访问权限
📌 5.1 设置文件为公开
String policy = "{ \"Version\":\"2012-10-17\", \"Statement\":[ { \"Effect\":\"Allow\", \"Principal\":\"*\", \"Action\":\"s3:GetObject\", \"Resource\":\"arn:aws:s3:::my-bucket/*\" } ] }";
minioClient.setBucketPolicy(SetBucketPolicyArgs.builder()
.bucket("my-bucket")
.config(policy)
.build());
✅ 作用:
-
让
my-bucket
里的所有文件可公开访问(无需登录)。
6️⃣ 其他 API
📌 6.1 复制文件
minioClient.copyObject(CopyObjectArgs.builder()
.source(CopySource.builder().bucket("my-bucket").object("test.txt").build())
.bucket("my-bucket")
.object("test-copy.txt")
.build());
✅ 作用:
-
复制
test.txt
为test-copy.txt
。
📌 6.2 移动文件(先复制后删除)
// 复制文件
minioClient.copyObject(CopyObjectArgs.builder()
.source(CopySource.builder().bucket("my-bucket").object("test.txt").build())
.bucket("new-bucket")
.object("test.txt")
.build());
// 删除原文件
minioClient.removeObject(RemoveObjectArgs.builder()
.bucket("my-bucket")
.object("test.txt")
.build());
✅ 作用:
-
把
test.txt
从my-bucket
移动到new-bucket
。
总结
功能 | API 方法 |
---|---|
连接 MinIO | MinioClient.builder() |
检查存储桶 | bucketExists() |
创建存储桶 | makeBucket() |
删除存储桶 | removeBucket() |
上传文件 | putObject() |
下载文件 | getObject() |
删除文件 | removeObject() |
获取文件 URL | getPresignedObjectUrl() |
获取文件信息 | statObject() |
列出文件 | listObjects() |
复制文件 | copyObject() |
设置存储桶公开 | setBucketPolicy() |
✅ 这些 API 能满足你在 Spring Boot 里集成 MinIO 的大部分需求! 🚀