阿里oss开源实现,分布式存储对象MinIO介绍

阿里oss开源实现,分布式存储对象MinIO介绍

精选文章moguli202025-01-12 12:26:0315A+A-
坚持原创,共同进步!请关注我,后续分享更精彩!!!

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有了整体的认识。

希望本文分享对大家有所帮助和参考。若存在不足之处,请多多指教,欢迎留言讨论。

点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2