8、SpringBoot集成MinIO
1、pom
xml
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.12</version>
</dependency>
2、application.yml
yaml
# ========================minio=====================
minio:
endpoint: http://127.0.0.1:9000
accessKey:
secretKey:
bucketName: xxaicloud
3、MinioConfig
java
package com.xx.config;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Author: xueqimiao
* @Date: 2025/3/5 15:53
*/
@Configuration
public class MinioConfig {
@Value("${minio.endpoint:}")
private String endpoint;
@Value("${minio.access-key:}")
private String accessKey;
@Value("${minio.secret-key:}")
private String secretKey;
@Bean
public MinioClient minioClient() {
return MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
}
}
4、MinIoUtil
java
package com.xx.util;
import io.minio.*;
import io.minio.errors.*;
import io.minio.http.Method;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
/**
* @Author: xueqimiao
* @Date: 2025/3/5 15:56
*/
@Component
public class MinIoUtil {
@Resource
private MinioClient minioClient;
@Value("${minio.bucketName}")
private String bucketName;
@Value("${minio.endpoint}")
private String minIOUrl;
/**
* 上传文件
*
* @param fileName
* @param inputStream
* @param contentType
* @return
*/
public String upload(String fileName, InputStream inputStream, String contentType)
throws ServerException, InsufficientDataException, ErrorResponseException,
IOException, NoSuchAlgorithmException, InvalidKeyException,
InvalidResponseException, XmlParserException, InternalException {
boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!isExist) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
// 文件上传
minioClient.putObject(PutObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.stream(inputStream, -1, 10485760)
.contentType(contentType)
.build());
// 设置 URL 过期时间为 1 小时(3600秒)
// int expirationTimeInSeconds = 3600; // 过期时间1小时
// 返回 URL 地址 V1
return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
.bucket(bucketName)
.object(fileName)
//.expiry(expirationTimeInSeconds)
.method(Method.GET)
.build());
}
}
5、测试
java
package com.xx;
import com.xx.util.MinIoUtil;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
* @Author: xueqimiao
* @Date: 2025/3/5 15:58
*/
@SpringBootTest
public class MinIoUtilTest {
@Resource
private MinIoUtil minIoUtil;
@Test
public void upload() {
try {
InputStream inputStream = new FileInputStream(new File("/Users/xueqimiao/Desktop/pic/1.jpg"));
System.out.println(minIoUtil.upload("1.jpg", inputStream, "image/jpg"));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}