Minio

Minio是什么?

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
分布式的文件存储系统,类似FastDFS、七牛云对象存储、阿里云对象存储…等等,可用于存储文件。

为什么使用Minio?

  1. 支持分布式(多盘、多机)。
  2. 部署简单docker run -p 9000:9000 minio/minio server /data即可,比FastDFS简单多了。
  3. MinIO存储桶通知功能:存储桶(Bucket)如果发生改变,比如上传对象和删除对象,可以使用存储桶事件通知机制进行监控。
  4. 支持多租户。
  5. 全面文档支持。

开始使用

安装

本篇采用Docker部署的方式,命令: docker run -p 9000:9000 minio/minio server /data
访问ip:9000即可访问minio可视化界面,MINIO_ACCESS_KEY默认minioadmin,MINIO_SECRET_KEY默认minioadmin。

Java集成

添加依赖

1
2
3
4
5
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.4</version>
</dependency>

基本使用方式

创建连接

1
MinioClient instance = MinioClient.builder().endpoint("http://ip:port").credentials("minioadmin","minioadmin").build();

桶操作

判断桶是否存在
1
2
// 传入桶名称
instance.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())
创建桶
1
2
// 传入桶名称,需要先判断桶是否存在,如果创建已存在的桶会报错
instance.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
删除桶
1
2
// 传入桶名称,需要先判断桶是否存在,如果删除不存在的桶会报错, removeBucket不会删除存储桶里的对象,删除非空桶报错
instance.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());

文件操作

本地文件上传
1
2
3
4
instance.uploadObject(UploadObjectArgs.builder().
bucket(bucket)
.object(objectName)
.filename(fileName).build());
流文件上传
1
2
3
4
5
6
7
File file = new File("C:\\\\Users\\\\G006648\\\\Pictures\\\\lufei.gif");
InputStream out = new FileInputStream(file);
instance.putObject(PutObjectArgs.builder()
.bucket(bucket)
.object(objectName)
.stream(out,file.length(),1024L*10*1024) //流、总大小、分次,每次上传文件大小
.contentType(contentType).build());
删除文件
1
instance.removeObject(RemoveObjectArgs.builder().bucket(bucket).object(object).build());

附录