1、简介
MinIO是一款基于Go语言发开的高性能、分布式的、开源的对象存储系统。兼容亚马逊的S3协议,对Kubernetes能够友好的支持,专为AI等云原生工作负载而设计。
2、Minio下载
下载地址如下:(本章下载的服务端)
服务端下载https://dl.minio.io/server/minio/release/windows-amd64/minio.exe
客户端下载https://dl.minio.io/client/mc/release/windows-amd64/mc.exe
3、安装和服务器启动
在电脑的E盘的develop文件夹下创建Minio的文件夹,并将刚才下载好的Minio服务端放在此文件夹下。(此文件只有刚才下载的mini.exe,其他文件是使用以后自动生成的)
在导航栏上打开命令窗
打开cmd窗口输入命令启动服务端
E:\develop\Miniio> minio.exe server E:\develop\Miniio
4、创建User和Bucket
4.1 创建User
点击左侧导航栏的identy下的User
点击右上角的Create User
创建好用户并且设置密码,策略选择consoleAdmin,然后点击save按钮。之后也可以使用该用户名和密码登录控制台。
4.2 生成accessKey和secretKey
创建好用户以后,点击Users中,你刚刚所创建好的user
依次选择Service Accounts,Create Access Key来创建accessKey和secretKey。
这里的Access Key和Secret Key要保存好(Secret Key只能在当前页面查看一次,以后就看不到了)
点击Download for import,保存生成的密钥。
4.3 创建Bucket
点击左侧导航栏Buckets,再点击右上角Create Bucket
按照命名格式要求输入Bucket的名称,再点击Create Bucket按钮即可创建好Bucket。
5、在SpringBoot中使用Minio
5.1 引入依赖
在pom.xml中引入下面依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.1</version>
</dependency>
5.2 Java实现本地文件上传到Minio
在项目中需要创建一个MiniosConfig,MiniosController,MinioUtils
配置类application.yml
5.2.1 配置类定义
application.yml中关于Minio的配置代码如下:
minio:
//这些填写你的信息即可
endpoint: http://192.168.160.1:9000 #Minio服务所在地址
bucketName: xfs999 #存储桶名称
accessKey: YtVsDJy5ZXKsFaNshoXk #访问的key
secretKey: 7yFu7bhTIgyFmFa6YLVysR60QMVIdhnxenN5o4Lh #访问的秘钥
5.2.2 MinioUtils
MinioUtils工具类代码如下
package com.wedu.modules.xfs.utils;
import io.minio.*;
import io.minio.errors.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.DeleteObject;
import io.minio.messages.Item;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
@Slf4j
@Component
@RequiredArgsConstructor
public class MinioUtils {
@Autowired
private MinioClient minioClient;
/**
* 上传文件到指定的存储桶中
*
* @param bucketName 存储桶名称
* @param file 上传的文件
* @param objectName 存储对象的名称
* @param contentType 文件的内容类型
* @return 文件上传的响应对象
* @throws Exception 如果上传过程中发生异常
*/
@SneakyThrows(Exception.class)
public ObjectWriteResponse uploadFile(String bucketName, MultipartFile file, String objectName, String contentType) {
InputStream inputStream = file.getInputStream();
return minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.contentType(contentType)
.stream(inputStream, inputStream.available(), -1)
.build());
}
}
5.2.2 MiniosConfig
MiniosConfig实体类代码如下:
package com.wedu.modules.xfs.config;
import io.minio.MinioClient;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MiniosConfig {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.access-key}")
private String accessKey;
@Value("${minio.secret-key}")
private String secretKey;
@Value("${minio.bucket-name}")
private String bucketName;
@Bean
public MinioClient miniosClient(){
return MinioClient.builder().endpoint(endpoint).credentials(accessKey,secretKey).build();
}
}
5.2.3 MiniosController
Minios控制层代码如下:
5.3 测试结果
在Minio服务端的主页,点击Object Browser 点击你刚刚创建的Bucket,就可以看到你刚刚上传的文件