
正文
SpringBoot 整合MinIO
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
引入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.0</version>
</dependency>
也用到了这个 如果已经引入就不需要
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
配置文件yml
minio:
url: http://192.168.80.134:9000
access-key: AKIAIOSFODNN7EXAMPLE
secret-key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
bucket-name: test
MinioProperties.java
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration; /**
* @author
* @date 2021/06/25
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioProperties {
/**
* minio 服务地址 http://ip:port
*/
private String url;
/**
* 用户名
*/
private String accessKey;
/**
* 密码
*/
private String secretKey;
/**
* 桶名称
*/
private String bucketName;
}
工具类
MinIoUtil.java
import com.example.minio.config.MinioProperties;
import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.PutObjectOptions;
import io.minio.messages.Bucket;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile; import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.List; /**
*
* Minio工具类
*/
@Slf4j
@Component
public class MinIoUtil { public static MinioClient minioClient; @Autowired
private MinioProperties minioProperties; public static MinIoUtil minIoUtil; /**
* 初始化minio配置
*/
@PostConstruct
public void init() { minIoUtil=this;
minIoUtil.minioProperties=this.minioProperties;
try { minioClient = MinioClient.builder().endpoint(minioProperties.getUrl()).credentials(minioProperties.getAccessKey(),minioProperties.getSecretKey()).build();
createBucket(minioProperties.getBucketName());
log.info(">>>>>>>>>>>minio 初始化成功");
} catch (Exception e) {
e.printStackTrace();
log.error("》》》》》》》》》》初始化minio异常: 【{}】", e.fillInStackTrace());
} } /**
* 判断 bucket是否存在
*
* @param bucketName 桶名
* @return: boolean
*/
@SneakyThrows(Exception.class)
public static boolean bucketExists(String bucketName) {
return minioClient.bucketExists(bucketName);
} /**
* 创建 bucket
* @param bucketName 桶名
* @return: void
*/
@SneakyThrows(Exception.class)
public static void createBucket(String bucketName) {
boolean isExist = minioClient.bucketExists(bucketName);
if (!isExist) {
minioClient.makeBucket(bucketName);
}
} /**
*
* 获取全部bucket
* @return: java.util.List<io.minio.messages.Bucket>
*/
@SneakyThrows(Exception.class)
public static List<Bucket> getAllBuckets() {
return minioClient.listBuckets();
} /**
* 文件上传
* @param bucketName 桶名
* @param fileName 文件名
* @param filePath 文件路径
*/
@SneakyThrows(Exception.class)
public static void upload(String bucketName, String fileName, String filePath) {
minioClient.putObject(bucketName, fileName, filePath, null);
} /**
* 文件上传(返回URL下载地址)
* @param bucketName 桶名
* @param fileName 文件名
* @param stream 文件流
* @return: 文件url下载地址
*/
@SneakyThrows(Exception.class)
public static String upload(String bucketName, String fileName, InputStream stream) {
minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));
return getFileUrl(bucketName, fileName);
} /**
* 文件上传 (返回URL下载地址)
* @param bucketName 桶名
* @param file 文件
* @return: 文件url下载地址
*/
@SneakyThrows(Exception.class)
public static String upload(String bucketName, MultipartFile file) {
final InputStream is = file.getInputStream();
final String fileName = file.getOriginalFilename();
minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));
is.close();
return getFileUrl(bucketName, fileName);
} /**
* 删除文件
* @param bucketName 桶名
* @param fileName 文件名
*/
@SneakyThrows(Exception.class)
public static void deleteFile(String bucketName, String fileName) {
minioClient.removeObject(bucketName, fileName);
} /**
* 下载文件 (流输出)
* @param bucketName 桶名
* @param fileName 文件名
*/
@SneakyThrows(Exception.class)
public static void download(String bucketName, String fileName, HttpServletResponse response) {
// 获取对象的元数据
final ObjectStat stat = minioClient.statObject(bucketName, fileName);
response.setContentType(stat.contentType());
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
InputStream is = minioClient.getObject(bucketName, fileName);
IOUtils.copy(is, response.getOutputStream());
is.close();
} /**
*
* 获取minio文件的下载地址
* @param bucketName 桶名
* @param fileName 文件名
*/
@SneakyThrows(Exception.class)
public static String getFileUrl(String bucketName, String fileName) {
return minioClient.presignedGetObject(bucketName, fileName);
} }
使用直接调用工具类的方法即可 例如
@PostMapping(value = "/upload")
public String upload(@RequestParam(value = "file") MultipartFile file){
String upload = MinIoUtil.upload("test", file);
return upload;
}





