1.在项目中添加MINIO的依赖、文中使用的是8.2.1
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.1</version>
</dependency>2.项目中配置相关配置文件、关于此处的命名可以自己定义、遵循yml文件格式即可
# 存储服务器
MINIO_PATH_URL: http://192.168.100.128
#存储文件块
MINIO_OSS_BUCKET: testa
#账号
MINIO_ACCESS_KEY: 4ctWALdoJ3kPFrfp
#密码
MINIO_SECRET_KEY: 2#n!amxIM@34fbjr@&aE3d*SGH1@!k7f
#类似于地区(类似与阿里云:杭州.........)
MINIO_REGION: cn-south-13.Utils代码
package com.example.*;
import io.minio.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.text.SimpleDateFormat;
/**
* @auther JiangYan
* @date 2021/4/30 15:14
* @desc MiniO分布式文件存储工具类
*/
@Component
public class MiniOUtils {
/**
* ACCESS_KEY
*/
private static String MINIO_ACCESS_KEY;
/**
* 服务器路径
*/
private static String MINIO_PATH_URL;
/**
* 文件存储块
*/
private static String MINIO_OSS_BUCKET;
/**
* SECRET_KEY
*/
private static String MINIO_SECRET_KEY;
/**
* REGION
*/
private static String MINIO_REGION;
@Value("${MINIO_ACCESS_KEY}")
public void setMinioAccessKey(String minioAccessKey) {
MINIO_ACCESS_KEY = minioAccessKey;
}
@Value("${MINIO_SECRET_KEY}")
public void setMinioSecretKey(String minioSecretKey) {
MINIO_SECRET_KEY = minioSecretKey;
}
@Value("${MINIO_REGION}")
public void setMinioRegion(String minioRegion) {
MINIO_REGION = minioRegion;
}
@Value("${MINIO_PATH_URL}")
public void setMinioPathUrl(String minioPathUrl) {
MINIO_PATH_URL = minioPathUrl;
}
@Value("${MINIO_OSS_BUCKET}")
public void setMinioOssBucket(String minioOssBucket) {
MINIO_OSS_BUCKET = minioOssBucket;
}
/**
* 构建连接客户端
*/
public static MinioClient minioClient = null;
/**
* init初始化
*/
@Bean
public static void intiMiiOClient() {
MiniOUtils.minioClient = MinioClient.builder()
.endpoint(MINIO_PATH_URL)
.credentials(MINIO_ACCESS_KEY, MINIO_SECRET_KEY)
.build();
}
/**
* 创建桶
*
* @param bucket 桶
*/
public static void makeBucket(String bucket) throws Exception {
// 判断桶是否存在
boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build());
if (!isExist) {
// 新建桶
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());
}
}
/**
* 通过二进制流上传到MiniO存储
*
* @param file 文件
* @param fileName 文件名
* @return
*/
public static String fileUpload2MiniO(MultipartFile file, String fileName) {
fileName = getToDay() + "/" + fileName;
try {
boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(MINIO_OSS_BUCKET).build());
if (!exists) {
//不存在就创建一个新的BUCKET
minioClient.makeBucket(MakeBucketArgs.builder().bucket(MINIO_OSS_BUCKET).build());
}
minioClient.putObject(PutObjectArgs.builder().bucket(MINIO_OSS_BUCKET)
.object(fileName)
.stream(file.getInputStream(), file.getSize(), -1)
.contentType(file.getContentType()).build());
} catch (Exception e) {
new RuntimeException("上传发生错误!");
}
return MINIO_PATH_URL + "/" + MINIO_OSS_BUCKET + "/" + fileName;
}
/**
* 文件下载
*
* @param fileName 文件名
* @return InputStream
*/
public static InputStream downLoadFile(String fileName) {
InputStream inputStream = null;
try {
StatObjectResponse statObjectResponse = minioClient.statObject(StatObjectArgs.builder().bucket(MINIO_OSS_BUCKET).object(fileName).build());
if (statObjectResponse.size() > 0) {
inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(MINIO_OSS_BUCKET).object(fileName).build());
}
} catch (Exception e) {
e.printStackTrace();
}
return inputStream;
}
/**
* 删除文件
*
* @param fileName
* @return flag
*/
public static Boolean removeFile(String fileName) {
boolean flag = false;
try {
minioClient.removeObject(RemoveObjectArgs.builder().bucket(MINIO_OSS_BUCKET).object(fileName).build());
flag = true;
} catch (Exception e) {
e.printStackTrace();
flag = false;
}
return flag;
}
/**
* 删除桶(只有当桶中没有数据的时候才能删除)
*
* @param bucketName
* @return
*/
public static boolean removeBucket(String bucketName) {
boolean exists = false;
try {
exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (exists) {
minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
exists = true;
}
} catch (Exception e) {
e.printStackTrace();
}
return exists;
}
/**
* 获取日期
*
* @return 例: 20210506
*/
public static String getToDay() {
SimpleDateFormat formatter = new SimpleDateFormat("yyyyddMM");
return formatter.format(System.currentTimeMillis());
}
}PS:如果在第二步的配置文件是自己的定义的话、需要在@Value注解修改成和配置文件对应的