MinIo对象存储
yuankaiqiang Lv5

​对象存储作为企业中数据存储必不可少的工具之一,目前市面上为了方便,大都使用阿里云OSS、腾讯COS等,作为个人使用,其实也可以简单搭建私有的独立ip的对象存储工具,部署在自己的服务器或者是本地的机器上,已经有相应的开源工具,比如下面介绍的MinIo。github地址:https://github.com/minio/minio

一、搭建MinIo

安装运行minio

docker

​ 启用下面的命令后,文件将存储在容器中的/data目录下,建议持久存储容器中的文件数据,使用-v /opt/minio/data:/data将容器中的/data目录映射到本机上的/opt/minio/data,启动后打开127.0.0.1:9000,默认的账号密码为都为minioadmin。

1
2
3
4
5
6
docker run -p 9000:9000 -p 9001:9001 \
quay.io/minio/minio server /data --console-address ":9001"
# 建议自己做映射
#docker run -p 9000:9000 -p 9001:9001 \
# -v /local/path:/data \
# quay.io/minio/minio server /data --console-address ":9001"

Mac

​ 使用brew下载安装minio,没有brew的先看下怎么安装brew

1
2
3
4
# 使用brew安装minio
brew install minio/stable/minio
# 启动minio,替换/data为本地路径/Users/xxx/Downloads
minio server /data

Linux

​ 二进制方式进行安装,

建筑学网址
64 位英特尔/AMDhttps://dl.min.io/server/minio/release/linux-amd64/minio
64位ARMhttps://dl.min.io/server/minio/release/linux-arm64/minio
64 位 PowerPC LE (ppc64le)https://dl.min.io/server/minio/release/linux-ppc64le/minio
IBM Z 系列 (S390X)https://dl.min.io/server/minio/release/linux-s390x/minio
1
2
3
4
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
替换/data为本地路径
./minio server /data

安装启动完成后

使用http://127.0.0.1:9000 打开

image-20240407104405031

创建一个名称为test的桶

image-20240407104749185

二、SpringBoot中使用

引入依赖

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

properties中定义相关配置

1
2
3
4
5
6
7
8
9
# ip和端口
minio.endpoint=127.0.0.1
minio.port=9000
# 账号密码
minio.accessKey=minioadmin
minio.secretKey=minioadmin
minio.secure=false
# 桶的名称
minio.bucketName=test

定义Bean

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
import io.minio.MinioClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {

private String endpoint;

private int port;

private String accessKey;

private String secretKey;

private Boolean secure;

@Bean
public MinioClient getMinioClient() {
return MinioClient.builder().endpoint(endpoint, port, secure).credentials(accessKey, secretKey).build();
}
}

在需要的地方引入使用MinioClient使用,后续可以自己封装为一个工具类

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
@Resource
private MinioClient minioClient;

/**
*
* @param file 文件
* @param folder 目录
* @return
*/
public void upload(MultipartFile file, String folder) {
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
String uploadName = System.currentTimeMillis() + "." + suffix;

// 文件路径
String finalName = folder + "/" + uploadName;
try {
PutObjectArgs build =
PutObjectArgs.builder()
.bucket("test")
.object(finalName)
.contentType(file.getContentType())
.stream(file.getInputStream(), file.getSize(), -1)
.build();
minioClient.putObject(build);
} catch (Exception e) {
e.printStackTrace();
}
}

想要搭建图床的话上床图片到MinIo中的话,可以自己写一个程序,在代码中实现上传到MinIo中,对于自定义图床的实现,可以参考我的另一篇文章自定义图床

 评论