minio
对象存储服务:
相关概念
-
存储桶(Bucket)
存储桶是用于组织对象的命名空间,类似于文件夹。每个存储桶可以包含多个对象。
-
对象(Object)
对象是实际的数据单元,例如我们上传的一个图片。
-
端点(Endpoint)
端点是MinIO服务器的网络地址,用于访问存储桶和对象,例如
http://192.168.10.101:9000
注意:
9000
为MinIO的API的默认端口,前边配置的9001
以为管理页面端口。 -
Access Key 和 Secret Key
Access Key是用于标识和验证访问者身份的唯一标识符,相当于用户名。
Secret Key是与Access Key关联的密码,用于验证访问者的身份。
访问权限问题
桶的默认权限为Private
桶的权限有
Private
: 只允许桶的所有者对该桶进行读写。
Public
:允许所有人对该桶进行读写。
Custom
:自定义访问权限。
对象存储服务:业务的要求是所有人有读权限。系统内的用户有相应的写权限。
这个需要一个南山之下 的JSON字符串进行描述,具体看官方文档。
{
"Statement" : [ {
"Action" : "s3:GetObject",
"Effect" : "Allow",
"Principal" : "*",
"Resource" : "arn:aws:s3:::test/*"
} ],
"Version" : "2012-10-17"
}
MinIO Java SDK
-
导入依赖
<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.5.3</version> </dependency>
-
编写相应代码
public class App { public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeyException { try { //构造MinIO Client MinioClient minioClient = MinioClient.builder() .endpoint("http://192.168.10.101:9000") .credentials("minioadmin", "minioadmin") .build(); //创建hello-minio桶 boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("hello-minio").build()); if (!found) { //创建hello-minio桶 minioClient.makeBucket(MakeBucketArgs.builder().bucket("hello-minio").build()); //设置hello-minio桶的访问权限 String policy = """ { "Statement" : [ { "Action" : "s3:GetObject", "Effect" : "Allow", "Principal" : "*", "Resource" : "arn:aws:s3:::hello-minio/*" } ], "Version" : "2012-10-17" }"""; minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket("hello-minio").config(policy).build()); } else { System.out.println("Bucket 'hello-minio' already exists."); } //上传图片 minioClient.uploadObject( UploadObjectArgs.builder() .bucket("hello-minio") .object("公寓-外观.jpg") .filename("D:\\workspace\\hello-minio\\src\\main\\resources\\公寓-外观.jpg") .build()); System.out.println("上传成功"); } catch (MinioException e) { System.out.println("Error occurred: " + e); } } }
-
测试