minIO下载与使用

  1. 官网地址 https://min.io/
  2. github地址 https://github.com/minio/minio
  3. windows 服务端下载地址 https://dl.minio.io/server/minio/release/windows-amd64/minio.exe

简介

image-20230814101315190

MinIO是一个高性能、分布式对象存储系统,专门设计用于存储和检索大规模数据对象,如照片、视频、日志文件等。它的设计灵感来自于云原生应用的要求,提供了云存储的灵活性和可伸缩性,适用于私有云、公有云和混合云环境。以下是MinIO的一些关键特点和简介:

  1. 对象存储:MinIO以对象的形式存储数据,每个对象通常包含数据本身、元数据(例如文件名、文件类型等)和一个唯一的标识符。

  2. 分布式架构:MinIO采用分布式架构,可以在多个节点上分布数据,提供高可用性和冗余,以防止数据丢失。

  3. 高性能:MinIO被设计为非常快速的对象存储系统,可以利用现代硬件和网络来实现低延迟和高吞吐量的数据访问。

  4. S3兼容性:MinIO提供了Amazon S3兼容的API,这意味着您可以使用AWS SDK和工具,以及现有的S3应用程序,无缝地连接到MinIO。

  5. 安全性:MinIO支持多种安全性功能,包括数据加密、身份验证、访问控制策略等,以确保数据的保密性和完整性。

  6. 扩展性:MinIO可以在需要时轻松扩展,可以添加更多的存储节点来应对不断增长的数据需求。

  7. 轻量级部署:MinIO的部署和维护非常简单,您可以在几分钟内设置一个MinIO实例,并开始存储和检索数据。

  8. 开源:MinIO是一个开源项目,其代码开放,社区活跃,您可以查看源代码、贡献代码或者报告问题。

MinIO主要用于存储海量的非结构化数据,如图片、视频、日志文件、备份数据等。它在大数据、云计算、容器化部署等场景中得到了广泛应用,特别适用于需要快速、可扩展和高性能存储的应用程序。无论是构建私有云存储解决方案,还是为现有应用添加对象存储功能,MinIO都是一个值得考虑的选择。

下载使用

下载后,打开cmd命令行,进入minIO.exe,执行命令

.\minio.exe server D:\minio\files ,注意 D:\minio\files 为文件保存路径

image-20230814095827485

根据上面命令行得到的地址与账户。打开浏览器控制台地址(Console)即可登录。

image-20230814095637539

新建桶与用户

新建桶

在MinIO中,”桶”(Bucket)是一种类似于文件夹的逻辑容器,用于组织和管理存储在MinIO服务器上的对象(文件)。桶在MinIO中具有以下特点:

  1. 逻辑容器:桶是一种逻辑上的容器,用于将对象进行组织和分类。您可以在MinIO中创建多个桶,每个桶可以包含不同类型的对象。
  2. 唯一命名空间:在整个MinIO服务器中,桶的名称必须是唯一的。这意味着不能有重复的桶名。
  3. 权限和策略控制:桶级别的权限设置允许您对不同的桶进行细粒度的访问控制,以确保安全性。您可以设置桶的访问权限,控制谁可以访问和操作桶中的对象。
  4. Lifecycle 策略:MinIO允许您为每个桶设置生命周期策略,自动执行对象的过期、删除等操作。
  5. 事件通知:您可以配置事件通知,以便在桶中发生某些事件(例如对象上传、删除)时接收通知。
  6. 访问日志:MinIO可以记录每个桶中的访问日志,以便您可以了解谁何时访问了桶中的对象。
  7. 版本控制:MinIO还支持在特定桶中启用对象版本控制,以便您可以管理对象的不同版本。
  8. 存储策略:您可以为每个桶选择不同的存储策略,例如标准存储、归档存储等。

image-20230814162818489

新建用户

image-20230814162629753

springboot整合minio实现文件预览上传

第一步:引入依赖

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

第二步:设置minIO配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.dpf.source.visualTool.util.minIO;


import io.minio.MinioClient;
import lombok.Data;
import org.codehaus.plexus.component.annotations.Component;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* minio相关配置 也可以配置在application.yml文件中
*/
@Configuration
@Data
public class MinIOConfig {
//注意,这里是api地址
private String endpoint = " http://172.16.7.252:9000";
//注意这里的accessKey和secretKey不是登陆控制台的key,而是**新建用户**
private String accessKey = "minioSpring";
private String secretKey = "minioSpring";
//储存桶
private String bucketName = "files";

public String getEndpoint() {
return endpoint;
}

public String getAccessKey() {
return accessKey;
}

public String getSecretKey() {
return secretKey;
}

public String getBucketName() {
return bucketName;
}

@Bean
public MinioClient getMinioClient(){
MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey,secretKey).build();
System.out.println("\"Minio Initialize........................successful\"");
return minioClient;
}
}

第三步:上传文件并返回预览Url地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.dpf.source.visualTool.util.minIO;

import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;


/**
* Minio工具类
*/
@Slf4j
@Component
public class MinIOServer {

@Autowired
private MinioClient minioClient;
@Autowired
private MinIOConfig minIOConfig;


/**
* 上传文件
*/

public String uploadFile(MultipartFile file) throws Exception{
// minioClient = MinioClient.builder().endpoint(minIOConfig.getEndpoint()).credentials(minIOConfig.getAccessKey(),minIOConfig.getSecretKey()).build();
String fileName = file.getOriginalFilename();
InputStream inputStream = file.getInputStream();


// 使用MinIO客户端将本地文件上传到指定的存储桶和对象
PutObjectArgs args = PutObjectArgs.builder()
.bucket(minIOConfig.getBucketName())
.object(fileName)
.stream(inputStream, file.getSize(), -1)
.contentType(file.getContentType())
.build();
minioClient.putObject(args);
inputStream.close();
return minIOConfig.getEndpoint() + "/" + minIOConfig.getBucketName() + "/" + fileName;

}

}

第四步:使用

1
pdfInfo.setUrl(minIOServer.uploadFile(file1));

第五步:测试

导入pdf文件,可以看到已经返回了预览的url地址,测试成功 。

image-20230814163442616