第一步:添加依赖
<!--minio依赖-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.0.2</version>
</dependency>
第二步:配置文件
#Minio Config
minio:
endpoint: http://192.168.110.101:9000
accessKey: minio
secretKey: minio123456
bucketName: test
第三步:配置类
package com.example.demo.config;
import io.minio.MinioClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class MinIoClientConfig {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
@Bean
public MinioClient minioClient() {
log.info("endpoint={} , accessKey={} ,secretKey={}", endpoint, accessKey, secretKey);
try {
return new MinioClient(endpoint, accessKey, secretKey);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
第四步:接口
package com.example.demo.service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
public interface MinIOService {
/**
* 检查存储桶是否存在
*
* @param bucketName 存储桶名称
* @return
*/
boolean bucketExists(String bucketName);
/**
* 创建存储桶
*
* @param bucketName 存储桶名称
*/
boolean makeBucket(String bucketName);
/**
* 上传文件
*
* @param file 上传文件
* @return 成功则返回文件名,失败返回空
*/
String uploadFile(MultipartFile file);
/**
* 下载文件
*
* @param objectName 文件路径
*/
InputStream downloadFile(String objectName, HttpServletResponse response);
/**
* 删除文件
*
* @param objectName 文件路径
* @return
*/
boolean deleteFile(String objectName);
/**
* 得到指定文件的InputStream
*
* @param objectName 文件路径
* @return
*/
InputStream getObject(String objectName);
/**
* 根据文件路径得到预览文件绝对地址
*
* @param objectName 文件路径
* @return
*/
String getPreviewFileUrl(String objectName);
}
第五步:接口实现
package com.example.demo.service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
public interface MinIOService {
/**
* 检查存储桶是否存在
*
* @param bucketName 存储桶名称
* @return
*/
boolean bucketExists(String bucketName);
/**
* 创建存储桶
*
* @param bucketName 存储桶名称
*/
boolean makeBucket(String bucketName);
/**
* 上传文件
*
* @param file 上传文件
* @return 成功则返回文件名,失败返回空
*/
String uploadFile(MultipartFile file);
/**
* 下载文件
*
* @param objectName 文件路径
*/
InputStream downloadFile(String objectName, HttpServletResponse response);
/**
* 删除文件
*
* @param objectName 文件路径
* @return
*/
boolean deleteFile(String objectName);
/**
* 得到指定文件的InputStream
*
* @param objectName 文件路径
* @return
*/
InputStream getObject(String objectName);
/**
* 根据文件路径得到预览文件绝对地址
*
* @param objectName 文件路径
* @return
*/
String getPreviewFileUrl(String objectName);
}
第六步:控制层
package com.example.demo.controller;
import com.example.demo.common.ApiConst;
import com.example.demo.common.ApiResult;
import com.example.demo.service.MinIOService;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@RestController
@RequestMapping(value = ApiConst.API_PREFIX + "minio")
@Slf4j
public class MinioController {
@Autowired
private MinIOService minIOService;
@SneakyThrows
@PostMapping("/upload")
public ApiResult<String> uploadFile(@RequestParam("file") MultipartFile file) {
String imgPath = minIOService.uploadFile(file);
return ApiResult.success(imgPath);
}
@SneakyThrows
@GetMapping("/preview")
public ApiResult<String> preview(@RequestParam("objectName") String objectName) {
String url = minIOService.getPreviewFileUrl(objectName);
return ApiResult.success(url);
}
}