Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的性能。
它兼容亚马逊S3云存储服务接口。可以很简单的和其他应用结合使用,例如 NodeJS、Redis、MySQL等。
下载 (官网:https://min.io/ )
cd /tmp wget https://dl.min.io/server/minio/release/linux-amd64/minio
创建安装目录,设置账号密码
mkdir -p /home/minio/data chmod +x minio cp minio /home/minio/data export MINIO_ACCESS_KEY=minioadmin export MINIO_SECRET_KEY=minioadmin
启动服务
#启动,该启动为前台启动 ./minio server /home/minio/data # 后台启动,默认端口方式 9000 nohup ./minio server /home/minio/data > /home/minio/data/minio.log 2>&1 & #后台启动,自定义端口方式 nohup ./minio server /home/minio/data --address=0.0.0.0:9009 >/home/minio/data/minio.log 2>&1 &
查看服务是否启动成功
ps -ef | grep minio
访问服务,根据实际情况修改IP和端口
http://192.168.206.22:9000
创建存储桶
配置存储桶公开访问
默认配置下,访问存储桶是需要请求授权的。但是在实际场景下,我们往往希望允许直接访问。所以我们要把访问规则(Access Policy)设置为:Public 。这样我们就可以直接访问了,文件的访问地址的格式为 <http://IP:Port/{bucket}/{fileName}>。
注意 端口已实际启动端口为准。
例如:http://192.168.206.22:9000/test/wallhaven-p989gm_1920x1080.png
MinIO Java Client SDK提供简单的API来访问任何与Amazon S3兼容的对象存储服务。
官方demo: https://github.com/minio/minio-java
官方文档:https://min.io/docs/minio/linux/developers/java/API.html
新版 MinIO和旧版在 API使用上还是有一定的区别,比如:新版 MinIO采用 Builder构建者模式来构造 MinioClient对象。所以,官方demo仅供参考,尽量查看英文官方文档。
引入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.4</version>
</dependency>
编写HelloWorld程序
package com.example.demo;
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.UploadObjectArgs;
import java.util.UUID;
public class MinioTest {
public static void main(String[] args) {
try {
// 初始化连接
MinioClient minioClient =
MinioClient.builder()
.endpoint("http://192.168.206.22:9000")
.credentials("hPnrX1KRjXqwE2Ef3rXE", "AJwbFRMFtzbrKe5bUlNdD5jR5RYwS5q2lw08GVvk")
// 直接用密码也可以,不建议
// .credentials("minioadmin", "minioadmin")
.build();
String bucketName = "test";
// 检查存储桶是否存在,不存在则创建
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!found) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
} else {
System.out.println("存储桶 " + bucketName + " 已存在.");
}
// 上传文件到桶
minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket(bucketName) // 指定桶
.object(UUID.randomUUID() + ".jpg") // 文件在桶里面名字,防止冲突用UUID命名
.filename("D:\\Temp\\HD00001.jpg") // 文件路径
.build());
System.out.println("上传成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}
其他使用示例,参考官方