背景
在后端开发中,常常会涉及到各种静态资源的操作,比如上传图片、下载图片、上传下载PDF
那么我们在进行迁移开发和部署或者各种分布式开发时就会面对着这些资源的处理,以防止目录丢失或者其他异常。
Minio就是一个对象存储解决方案,一般都做min-io,顾名思义就是:最小输入输出
MinIO有能力在任何地方部署 - 公有云或私有云,裸金属基础设施,编排环境,以及边缘基础设施。所以可以更快速的解决上面提到的一系列问题。
操作
这里以我们常用的windows开发环境为例,开发环境熟练使用后,部署时也能很顺畅的使用了。
先简单说一下minio里的一个概念
bucket桶: 可以简单理解为文件夹,桶是 MinIO 中用于组织和管理对象的容器。每个桶都有一个唯一的名称,在同一个 MinIO 实例中,桶名称必须是唯一的。用户可以通过桶来对对象进行逻辑分组。
1.下载并启动minio
下载地址为:https://dl.minio.org.cn/server/minio/release/windows-amd64/minio.exe
启动命令:在minio.exe文件目录下打开cmd并执行minio.exe server minio
,将会启动minio,并且打印访问的url和用户名、密码
访问minio的url地址,并输入上面的用户名密码:
2. 添加依赖与配置项
pom.xml
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.6</version>
</dependency>
application.yml
spring:
minio:
access-key: minioadmin # 用户名
secret-key: minioadmin #密码
url: http://127.0.0.1:9000 #访问地址
3. 创建MinioConfig配置类信息
通过以下的配置,我们就可以创建一个适用于我们上面启动的minio的配置项,同时完成了MinioClient的注册
@Data
@Configuration
@ConfigurationProperties(prefix = "spring.minio")
public class MinioConfig {
private String accessKey;
private String secretKey;
private String url;
// 或者,主要目的是获取yml中的配置内容
//@Value("${spring.minio.url}")
//private String minioEndpoint;
//@Value("${spring.minio.access-key}")
//private String minioAccessKey;
//@Value("${spring.minio.secret-key}")
//private String minioSecretKey;
@Bean
public MinioClient minioClient(){
return MinioClient.builder()
.endpoint(url)
.credentials(accessKey,secretKey)
.build();
}
}
4. 常用操作
我们可以进入自动注入的minioClient配置类查看常用操作
我们主要介绍常用的一些操作
4.0 创建单元测试
创建单元测试,并自动注入MinioClient
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class test {
@Resource
private MinioClient minioClient;
// 以桶为test,文件为D:/test/test.jpg为案例
private final String bucketName = "test";
File file = new File("D:/test/test.jpg");
}
4.1 创建桶
@Test
void createBucket() throws Exception {
if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
}
可以看到已经成功创建了桶
4.2 删除桶
@Test
void deleteBucket() throws Exception {
if (minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
}
}
可以看到桶被删除了