20-1-Minio技术调研(实现)
20-1-Minio技术调研(实现)
1.如何调研
参考官网上的内容,官网地址如下:https://docs.min.io/
2.如何学习技术
什么是MinIO?
MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的。它与 Amazon S3 云存储服务 API 兼容。使用 MinIO 为机器学习、分析和应用程序数据工作负载构建高性能基础架构。
MinIO是,什么是对象存储(Object Storage Service)?,对象存储是支持海量用户远程访问的无限容量廉价存储系统,既然是存储系统。它由(bucket,对应Windows下的文件夹),组成目录结构,桶中直接存放对象(Object,对应Windwos下的文件),,但是能创建文件夹
MinIO怎么用?
- 下载和本地启动MinIO
- 下载MinIO
- 访问官网:https://docs.min.io/

进入下载页面点击windows

点击下载服务端

这边老师已经给同学们下载好了在今天的资料里,同学们就不要再自行下载了👍 👍 👍
将MinIO.exe 拷贝到自己的目录下去,并创建一个data目录
通过命令行启动Minio
# 启动命令
minio server ./data

启动完成后,可以看到访问的路径http://127.0.0.1:9000

使用提供的账号密码进行登录
账号:minioadmin 密码:minioadmin

说明minio已经正常启动了 🎉 🎉 🎉
3.MioIO的使用
由于我们已经了解到MinIO是由桶(bucket)组成的,相当于是文件夹
- 创建桶bucket

- 创建桶

- 创建名叫huike-crm的桶

- 创建好桶之后看到如下内容

- 先尝试通过MinIO的控制台上传一个文件

- 上传一个java.png


- 点击上传的文件并生成分享的链接


- 点击copy拷贝生成分享的url
http:/huike-crm/java.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=KGWTGVTCK8G5MV01HQ5A%2F20220318%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220318T081644Z&X-Amz-Expires=604800&X-Amz-Security-Token=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiJLR1dUR1ZUQ0s4RzVNVjAxSFE1QSIsImV4cCI6MTY0NzU5MzU4MSwicGFyZW50IjoibWluaW9hZG1pbiJ9.BdsOeJp6v1zPUPTH79Eb4u_Mf_f8eG0Pvwd8IewMdI1mJGSzqYnJxaP3SKV_-c4AtoIYBJBT_4zh2N3AYYFOUw&X-Amz-SignedHeaders=host&versionId=null&X-Amz-Signature=c3205a0361341505aa4107655716c4e71a47dd40606bd4e03033138fbd6b7c96
在浏览器里访问,可以看到上传的图片

可以看到图片里的内容,证明minio已经可以正常使用了 🎉 🎉 🎉
⚠️但是,存在一些问题,我们生成一个分享url的时候发现有一个有效期

也就是说我们生成的分享的url的有效期只有7天 ,过了这7天以后再想通过这个url来进行访问就会有问题
我们能否直接将上传上来的文件暴露出去,而不再需要通过分享的这个url来进行访问呢?
如果现在我们要直接访问我们的MinIO里的文件要如何访问
我们应该直接访问 Minio的ip+端口/桶名称/文件名
http://172.16.17.121:9000/huike-crm/java.png
我们在浏览器中尝试了一下

看到返回的数据的内容,没有权限
注意这里的权限的配置是在桶这一级别的




添加读取readOnly对应的权限是* 即拥有所有权限 👈

然后重新范围java.png
http://172.16.17.121:9000/huike-crm/java.png

到此对minio的配置全部结束 🆗
参考官网

导入maven
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.7</version>
</dependency>
<!-- minio依赖于okhttp,所以pom文件还需要引入一下okhttp。 -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.0</version>
</dependency>
FileUploader.java
package com.yangeit;
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.UploadObjectArgs;
import io.minio.errors.MinioException;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class FileUploader {
public static void main(String[] args)
throws IOException, NoSuchAlgorithmException, InvalidKeyException {
try {
// Create a minioClient with the MinIO server playground, its access key and secret key.
//创建一个包含 MinIO 服务器、其访问密钥和密钥的 minioClient。
MinioClient minioClient =
MinioClient.builder()
.endpoint("http://192.168.0.160:9000/") //ip加端口,在黑窗口上有显示
// 用户名和密码,在黑窗口上有显示
.credentials("minioadmin", "minioadmin")
.build();
//如果不存在,请制作“fantong”桶。
boolean found =
minioClient.bucketExists(BucketExistsArgs.builder().bucket("fantong").build());
if (!found) {
// 创建一个叫 fantong的桶
minioClient.makeBucket(MakeBucketArgs.builder().bucket("fantong").build());
} else {
System.out.println("fantong 已经存在");
}
// 上传一个C:\Users\huyan\Pictures\111.bmp的文件作为对象,到fantong中
minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket("fantong") //存到哪个桶
.object("111.bmp") //存到桶里面的文件名字
.filename("C:\\Users\\huyan\\Pictures\\111.bmp") //本地的文件位置
.build());
System.out.println("文件已经上传陈宫,object对象 siaphotos-2015.zip 到 fantong中 ");
} catch (MinioException e) {
System.out.println("Error occurred: " + e);
System.out.println("HTTP trace: " + e.httpTrace());
}
}
}