MinIO,全球领先的对象存储先锋,不过多介绍了,详细请看官网
英文官网:https://min.io/
这里使用 docker 简单搭建 minio 环境
1、环境搭建
docker 拉取镜像
docker pull minio/minio
创建数据挂载文件夹
mkdir -p /docker_data/minio-data
开启 minio 容器
账号:admin
密码:12345678
docker run -d --privileged=true \
-p 9000:9000 \
-p 9001:9001 \
--name my-minio \
-v /docker_data/minio-data:/data \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=12345678" \
minio/minio server /data --console-address ":9001"
开启成功后浏览器访问宿主机器 ip + 9001端口
笔者这里是 http://192.168.0.111:9001/
输入账号密码登录
登录成功
2、java API 的使用
新建 maven 工程,添加下面依赖
<!-- minio -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.7</version>
</dependency>
<!-- minio依赖okhttp,且版本>= 4.8.1 -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.3</version>
</dependency>
为了方便流的操作,再添加下面的依赖
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
部分 API 的使用
创建 MinioClient 对象
MinioClient minioClient = MinioClient
.builder()
.endpoint("http://192.168.0.111:9000")
.credentials("admin", "12345678")
.build();
判断桶是否存在
java-minio-demo1 是桶名称
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("java-minio-demo1").build());
获取桶下面的文件列表
Iterable<Result<Item>> results = minioClient.listObjects(
ListObjectsArgs.builder().bucket("java-minio-demo1").build());
results.forEach(v->{
try {
//文件名
System.out.println(v.get().objectName());
System.out.println(v.get().userMetadata());
} catch (Exception e) {
e.printStackTrace();
}
});
创建桶 my-bucketname
minioClient.makeBucket(MakeBucketArgs.builder().bucket("my-bucketname").build());
以流的形式下载桶中的文件 20.png
try (InputStream stream = minioClient.getObject(
GetObjectArgs.builder()
.bucket("java-minio-demo1")
.object("20.png")
.build())) {
// Read data from stream
FileOutputStream fileOutputStream = new FileOutputStream("D:\\tmp\\minio\\a.png");
IOUtils.copy(stream, fileOutputStream);
}
通过流的形式上传文件 D:\tmp\img\1.jpg
FileInputStream fileInputStream = new FileInputStream("D:\\tmp\\img\\1.jpg");
minioClient.putObject(
PutObjectArgs.builder()
.bucket("java-minio-demo1")
.object("图片.jpg")
.stream(fileInputStream, -1, 10485760)
.build()
);
上传目录下文件 D:\tmp\minio\person.json
minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket("java-minio-demo1")
.object("person.json")
.filename("D:\\tmp\\minio\\person.json")
.build()
);
下载文件到文件夹
minioClient.downloadObject(DownloadObjectArgs
.builder()
.bucket("java-minio-demo1")
.object("person.json")
.filename("D:\\tmp\\minio\\person1.json")
.build()
);
删除文件
minioClient.removeObject(
RemoveObjectArgs.builder().bucket("java-minio-demo1").object("personjson").build());
获取文件访问地址
String url = minioClient.getPresignedObjectUrl(
GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket("java-minio-demo1")
.object("2022031732.jpg")
//配置链接过期时间
.expiry(2, TimeUnit.HOURS)
//.extraQueryParams(reqParams)
.build());
至此完