MinIO搭建OSS

MinIO搭建OSS

环境搭建

环境基于dokcer。

首先确保docker启动状态,输入命令

1
docker pull minio/minio

等待下载完毕后,需要创建两个文件夹:config和data,作为minIO的docker映射文件夹

image.png

执行命令,启动容器

1
2
3
4
5
6
7
8
9
docker run -d \
-p 9000:9000 \
-p 9001:9001 \
--name minio \
-e "MINIO_ROOT_USER=KALOSORA" \
-e "MINIO_ROOT_PASSWORD=KALOSORA" \
-v /Users/kalosora/docker-reflection/minio/data:/data \
-v /Users/kalosora/docker-reflection/minio/config:/root/.minio \
minio/minio server /data --console-address ":9001"

命令说明:

  • 需要映射两个端口,一个是api端口,另一个是web控制台端口,最后要用 --console-address 指定控制台,那么此时9001被指定为控制台端口,另一个9000就会自动变成API端口
  • USER和PASSWORD最好是纯英文字符串,不要包含特殊符号,因为曾经试过登录以后Java上传不了文件
  • 这里映射的/data和/config路径对应上面创建的两个文件夹路径

当docker后台显示如下即为搭建完成

image.png

设置访问策略

登陆到控制台

1
http://127.0.0.1:9001

点击右上角添加存储桶

image.png

添加完毕后,设置访问策略为public,这样可以通过 http://127.0.0.1:9001/存储桶名称/文件名 的形式访问

image.png

最后添加一个访问规则

image.png

按照图里的进行设置即可

image.png

简单实例

maven依赖

1
2
3
4
5
6
<!--           Minio     -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.0</version>
</dependency>

本地文件上传

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

// MinIO OSS
// 测试文件上传
public static void main(String[] args)
throws IOException, NoSuchAlgorithmException, InvalidKeyException {
try {

// Base information
String accessKey = "KALOSORA";
String secretKey = "KALOSORA";
String serverUrl = "http://127.0.0.1:9000";
String bucketName = "images";

// Create a minioClient with the MinIO server playground, its access key and secret key.
MinioClient minioClient =
MinioClient.builder()
.endpoint(serverUrl)
.credentials(accessKey, secretKey)
.build();

// Make 'asiatrip' bucket if not exist.
boolean found =
minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!found) {
// Make a new bucket called 'asiatrip'.
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
} else {
System.out.println("Bucket already exists.");
}

// Upload '/home/user/Photos/asiaphotos.zip' as object name 'asiaphotos-2015.zip' to bucket
// 'asiatrip'.
minioClient.uploadObject(
UploadObjectArgs.builder()
//.contentType("image/jpg")
.bucket(bucketName)
.object("portal-cover.jpg")
.filename("/Users/kalosora/Desktop/portal-cover.jpg")
.build());
System.out.println("File has been uploaded!");
} catch (MinioException e) {
System.out.println("Error occurred: " + e);
System.out.println("HTTP trace: " + e.httpTrace());
}
}

文件流上传

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
    public static void main(String[] args)
throws IOException, NoSuchAlgorithmException, InvalidKeyException {
try {

// Base information
String accessKey = "KALOSORA";
String secretKey = "KALOSORA";
String serverUrl = "http://127.0.0.1:9000";
String bucketName = "article";

// Create a minioClient with the MinIO server playground, its access key and secret key.
MinioClient minioClient =
MinioClient.builder()
.endpoint(serverUrl)
.credentials(accessKey, secretKey)
.build();

// Make 'asiatrip' bucket if not exist.
boolean found =
minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!found) {
// Make a new bucket called 'asiatrip'.
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
} else {
System.out.println("Bucket 'test' already exists.");
}

// 通过文件流上传
File file = new File("/Users/kalosora/Downloads/tempfile/210426A9N10GBYNC_数据结构 - 集合.md");
minioClient.putObject(
PutObjectArgs.builder().bucket(bucketName)
.object("kalosora/article.md") // 这里可以自动生成kalosora文件夹
.stream(new FileInputStream(file), -1, 10485760)
.build());

System.out.println("File has been uploaded!");
} catch (MinioException e) {
System.out.println("Error occurred: " + e);
System.out.println("HTTP trace: " + e.httpTrace());
}
}
}

Springboot整合

前端引用上传后的图片

1
<img src="http://127.0.0.1:9000/images/portal-cover.jpg" alt="Photo 1" class="img-fluid">

参考

完整实例1

https://blog.csdn.net/zhuyu19911016520/article/details/109448375?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_v2~rank_aggregation-15-109448375.pc_agg_rank_aggregation&utm_term=minio+存储视频&spm=1000.2123.3001.4430

完整实例2

https://blog.csdn.net/qq_43230007/article/details/108701081?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_v2~rank_aggregation-2-108701081.pc_agg_rank_aggregation&utm_term=minio文件流&spm=1000.2123.3001.4430

0%