一.简述
MinIO是一个高性能、分布式的对象存储系统,专为云原生和容器化环境而设计。它使用分布式架构来存储和管理大规模的非结构化数据,如图片、视频、日志文件等。MinIO基于Amazon S3协议,并提供了与S3兼容的API,这使得它能够与现有的S3生态系统无缝集成。
MinIO的优点包括高可用性、高性能、数据安全以及灵活性。通过数据分布和冗余,MinIO可以提高系统的可用性,即使部分节点发生故障也不会影响系统的正常运行。同时,MinIO支持水平扩展,可以并行读写操作,提高数据的访问速度。此外,它还支持数据加密和访问控制,确保数据的安全性和完整性。MinIO的灵活性体现在它可以根据应用需求进行扩展和缩减,同时支持多种存储后端,可以与其他存储系统集成使用。
然而,MinIO也存在一些缺点。首先,其分布式部署需要进行一定的配置和管理,可能较为复杂。其次,学习成本较高,需要对分布式系统和存储技术有一定的了解才能有效地使用MinIO。最后,分布式存储系统通常需要较多的硬件资源和网络带宽,可能会增加系统的运维成本。
MinIO的应用场景非常广泛,包括AI/ML、分析、备份/恢复以及现代Web和移动应用程序。在前端使用场景下,MinIO的优点在于可以通过API直接上传文件至服务器,但对于某些纯浏览器模块加载器构建的项目可能不适用,且前端直传时缺乏对上传进度的直观反馈,用户体验可能欠佳。
总的来说,MinIO是一个功能强大、灵活且易于扩展的对象存储系统,适用于各种云原生和容器化环境。然而,在使用前需要充分考虑其配置复杂性、学习成本以及运维成本等因素。
二.安装
1.window安装
- 在官网下载好后,得到 minio.exe
- 创建一个存储非结构化数据的文件夹,如data
- 启动minio : 在minio.exe所在目录下,打开cmd窗口 输入: minio.exe server 存放文件的绝对路径
minio.exe server D:\Software\minIO\data
进入minio的图形化管理界面
1.
或者 (单机):localhost:9000
用户名:minioadmin
密码:minioadmin
2.linux安装(docker容器)
//拉取镜像
docker pull quay.io/minio/minio// 创建数据存储目录
mkdir -p ~/minio/data// 创建minio
docker run \
-p 9001: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"
三.简单使用
先创建buckets
把访问策略改为公共的
四.springboot整合minio
参考官网
1.导入依赖
<!-- common-util模块中加入如下依赖 --> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.5.2</version> </dependency>
2.示例代码
public class FileUploadTest { public static void main(String[] args) throws Exception { // 创建一个Minio的客户端对象 MinioClient minioClient = MinioClient.builder() .endpoint("http://127.0.0.1:9000") .credentials("minioadmin", "minioadmin") .build(); boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket("spzx-bucket").build()); // 如果不存在,那么此时就创建一个新的桶 if (!found) { minioClient.makeBucket(MakeBucketArgs.builder().bucket("spzx-bucket").build()); } else { // 如果存在打印信息 System.out.println("Bucket 'spzx-bucket' already exists."); } FileInputStream fis = new FileInputStream("D://01.jpg") ; PutObjectArgs putObjectArgs = PutObjectArgs.builder() .bucket("spzx-bucket") .stream(fis, fis.available(), -1) .object("01.jpg") .build(); minioClient.putObject(putObjectArgs) ; // 构建fileUrl String fileUrl = "http://127.0.0.1:9000/spzx-bucket/01.jpg" ; System.out.println(fileUrl); } }