阿里oss开源实现,分布式存储对象MinIO介绍
坚持原创,共同进步!请关注我,后续分享更精彩!!!
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。
MinIO存储的对象文件可以是任意大小,从几kb到最大5T不等。若有使用过阿里云的oss服务,MinIO可提供相似的功能。
MinIO docker安装
MinIO 需要一个持久卷来存储配置和应用数据。要创建具有永久存储的MinIO容器,需要将本地持久目录从主机操作系统映射到虚拟配置minio 并导出/data目录。
docker run -p 9000:9000 \
--name minio \
-v /home/minio/data:/data \
-e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE" \
-e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
minio/minio server /data
其中:
-v /home/minio/data:/data 参数把宿主机目录(/home/minio/data)挂载到docker容器内。
MINIO_ROOT_USER和MINIO_ROOT_PASSWORD参数设置MinIO Access和Secret密钥。
容器启动成功后,浏览器访问地址:
http://{ip}:9000/minio/login
web界面输入上面配置的access和secret,点击登录。
登录成功首页
Java clinet
为方便对象的操作,MinIO官方提供了多种语言的client客户端SDK。这里以Java为例。
maven依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>3.0.10</version>
</dependency>
测试代码
MinIO服务,对存储其上的对象资源文件,以bucket(桶)的方式进行分类。以下代码以图片文件的上传下载为例。
@Test
public void testMinIoPutAndGet() throws InvalidPortException, InvalidEndpointException, IOException, InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, ErrorResponseException, NoResponseException, InvalidBucketNameException, XmlPullParserException, InternalException, RegionConflictException, InvalidObjectPrefixException, InvalidArgumentException, InvalidExpiresRangeException {
//替换为实际地址ip
String url = "http://192.168.**.***:9000/";
String accessKey = "AKIAIOSFODNN7EXAMPLE";
String secretKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY";
//创建minio client
MinioClient minioClient = new MinioClient(url,accessKey,secretKey);
String bucket = "minio.test.bucket";
String objectName = "testPic.png";
String file = "d:/testPic.png";
boolean isExists = minioClient.bucketExists(bucket);
if (!isExists) {
//bucket桶不存在,则创建
minioClient.makeBucket(bucket);
/*
设置bucket策略类型。前缀为*,策略只读,表示指定bucket下所有文件访问不需权限验证。
请根据业务场景,谨慎设置!!!
屏蔽该行代码,设置bucket下的文件对象默认需要权限验证。
*/
minioClient.setBucketPolicy(bucket,"*", PolicyType.READ_ONLY);
}
//上传文件
minioClient.putObject(bucket,objectName,file);
//获取文件访问路径
String fileObjPath = minioClient.getObjectUrl(bucket,objectName);
log.info("access object full path is {}",fileObjPath);
//获取文件临时访问路径。有效时间单位为秒,不能大于7天。
String presignedPath = minioClient.presignedGetObject(bucket,objectName,3600);
log.info("access object temp path is {}",presignedPath);
}
注意:
bucket的名字需要遵守一定命名规范,字符中不能存在大写。详细请参见官方文档:
https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html
查看web管理界面,minio.test.bucket已创建成功。
用例执行结果:
复制控制台打印图片地址,浏览器可直接访问。
小结
本文对分布式对象存储服务MinIO进行了简单介绍。通过服务的docker安装,web管理界面访问,java client测试用例使用学习,相信大家对minIO有了整体的认识。
希望本文分享对大家有所帮助和参考。若存在不足之处,请多多指教,欢迎留言讨论。