一 Minio介绍
1 minio是什么
官网:https://www.minio.org.cn/
官方示例代码演示:Java Quickstart Guide — MinIO Object Storage for Linux
MinIO是一个开源的分布式对象存储服务器,支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发,拥有轻量级、高性能、易部署等特点,并且可以自由选择底层存储介质。
2 主要特点
MinIO的主要特点包括:
1、高性能:MinIO基于GO语言编写,具有高速、轻量级、高并发等性能特点,还支持多线程和缓存等机制进行优化,可以快速地处理大规模数据。
2、可扩展性:MinIO采用分布式存储模式,支持水平扩展,通过增加节点数量来扩展存储容量和性能,支持自动数据迁移和负载均衡。
3、安全性:MinIO提供了多种安全策略,如访问控制列表(ACL)、服务端加密(SSE)、传输层安全性(TLS)等,可以保障数据安全和隐私。
4、兼容性:MinIO兼容AWS S3 API,还支持其他云服务提供商的API,比如GCP、Azure等,可以通过简单的配置实现互操作性。
5、简单易用:MinIO的部署和管理非常简单,只需要运行一个二进制包即可启动服务,同时提供了Web界面和命令行工具等方便的管理工具。
S3协议 :是Amazon Web Services (AWS) 提供的对象存储服务(Simple Storage Service)的API协议。它是一种 RESTful风格的Web服务接口,使用HTTP/HTTPS协议进行通信,支持多种编程语言和操作系统,并实现了数据的可靠存储、高扩展性以及良好的可用性。
二 安装与启动
1 linux
1.1 创建数据存储目录
mkdir -p ~/minio/data
1.2 创建minio
docker run \
-p 9000:9000 \
-p 9090:9090 \
--name minio \
-v ~/minio/data:/data \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123456" \
-d \
quay.io/minio/minio server /data --console-address ":9090"
1.3 访问地址
linux的ip加上端口号9000
2 window
2.1 下载minio的下载文件
2.2 创建空文件夹,作为数据存储目录
2.3 在windows使用命令启动Minio服务
后面的地址是创建数据存储目录的地址
-- minio.exe server E:\minio\date
2.4 访问
* 访问Minio控制台 ip:9000
* 默认控制台用户名和密码都是 :minioadmin
3 前提准备
步骤一 在minio控制台创建buckets,点击创建bucket
步骤二 输入名字点击创建
步骤三 点进text桶里面改权限
将private改成public
三 上传文件
官方示例代码演示:Java Quickstart Guide — MinIO Object Storage for Linux
1 在配置文件配置相关信息
minio:
endpointUrl: http://192.168.6.129:9000
accessKey: minioadmin
secreKey: minioadmin
bucketName: daijia
2 定义配置类读取配置信息
@Configuration
@ConfigurationProperties(prefix="minio") //读取节点
@Data
public class MinioProperties {
private String endpointUrl;
private String accessKey;
private String secreKey;
private String bucketName;
}
3 编写上传文件逻辑
将配置信息注入类中使用
@Autowired
private MinioProperties minioProperties;
@Override
public String upload(MultipartFile file) {
/*
步骤:
1 创建MinIO客户端并配置。
2 检查和创建桶(如果不存在)。
3 生成唯一的文件名和路径。
4 上传文件到MinIO。
5 返回文件的访问URL。
6 处理上传过程中可能发生的异常。
*/
try {
// 创建一个Minio的客户端对象
MinioClient minioClient = MinioClient.builder()
.endpoint(minioProperties.getEndpointUrl())
.credentials(minioProperties.getAccessKey(), minioProperties.getSecreKey())
.build();
//2 检查和创建桶(如果不存在)。
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProperties.getBucketName()).build());
if (!found) { // 如果不存在,那么此时就创建一个新的桶
minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProperties.getBucketName()).build());
} else { // 如果存在打印信息
System.out.println("Bucket 'daijia' already exists.");
}
//3 生成唯一的文件名和路径。
String extFileName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
String fileName = new SimpleDateFormat("yyyyMMdd")
.format(new Date()) + "/" + UUID.randomUUID().toString().replace("-" , "") + "." + extFileName;
//4 上传文件到MinIO。
PutObjectArgs putObjectArgs = PutObjectArgs.builder()
.bucket(minioProperties.getBucketName())
.stream(file.getInputStream(), file.getSize(), -1)
.object(fileName)
.build();
minioClient.putObject(putObjectArgs) ;
//5 返回文件的访问URL。
return minioProperties.getEndpointUrl() + "/" + minioProperties.getBucketName() + "/" + fileName ;
} catch (Exception e) {
//6 处理上传过程中可能发生的异常。
throw new GuiguException(ResultCodeEnum.DATA_ERROR);
}
}