MinIO 实战

MinIO 实战

MinIO 快速入门

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL

安装 MinIO

我们直接使用 Docker 来安装 MinIO ,这里使用的是稳定版:

1
docker run -d -p 9000:9000 --name minio-dev -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin" -v /apps/minio/data:/data -v /apps/minio/conf:/root/.minio  minio/minio server /data

image

安装 MinIO Client

MinIO Client (mc) 为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ls       列出文件和文件夹。
mb 创建一个存储桶或一个文件夹。
cat 显示文件和对象内容。
pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。
share 生成用于共享的URL。
cp 拷贝文件和对象。
mirror 给存储桶和文件夹做镜像。
find 基于参数查找文件。
diff 对两个文件夹或者存储桶比较差异。
rm 删除文件和对象。
events 管理对象通知。
watch 监听文件和对象的事件。
policy 管理访问策略。
session 为cp命令管理保存的会话。
config 管理mc配置文件。
update 检查软件更新。
version 输出版本信息。

首先需下载 MinIO Client ,这里同样使用Docker 来进行操作:

1
2
3
docker pull minio/mc
docker run minio/mc ls play
docker run -it --entrypoint=/bin/sh minio/mc

添加云存储服务

1
mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> <API-SIGNATURE>

别名就是给你的云存储服务起了一个短点的外号。S3 endpoint,access key和secret key是你的云存储服务提供的。API签名是可选参数,默认情况下,它被设置为”S3v4”。

示例-MinIO云存储

1
mc config host add minio http://127.0.0.1:9000 admin admin S3v4

首先我们创建一个 bucket

1
mc mb minio/public # 创建桶

然后将其桶策略设置为开放管理,以便于我们通过url 直接访问资源:

1
mc policy set public minio/public

测试

我们可以使用浏览器访问 http://127.0.0.1:9000 进行登陆操作,进入 public 目录下上传一张图片 test.jpg ,访问 http://127.0.0.1:9000/public/test.jpg ,图片能正常显示。

实战

下面将介绍 MinIO Java Client API ,首先我们引入 Maven 依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>3.0.10</version>
</dependency>

然后创建一个 FileController

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
@RestController
public class FileController {

public static final String OSS_PATH = "http://byference.com:9000";

@PostMapping("fileUpload")
public String fileUpload(MultipartFile file) throws Exception {

String bucketName = "public";
MinioClient minioClient = new MinioClient(OSS_PATH);
if (!minioClient.bucketExists(bucketName)) {
minioClient.makeBucket(bucketName);
}

String objectName = generateFileName(file.getOriginalFilename());
minioClient.putObject(bucketName, objectName, file.getInputStream(), file.getContentType());
return String.format("%s/public/%s", OSS_PATH, objectName);
}


/**
* generateFileName
*/
public String generateFileName(String fileName) {
return UUID.randomUUID().toString().replaceAll("-", "") + "_" + fileName;
}
}

然后使用 PostMan 进行测试

image

# MinIO
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×