1. 配置类
@Configuration
public class MinIOConfiguration {
/**
* Minio 配置
* @return
*/
@Bean
public MinioClient minioClient() {
// 创建 MinioClient 客户端
return MinioClient.builder()
.endpoint(MinioProperties.ENDPOINT)
.credentials(MinioProperties.ACCESS_KEY, MinioProperties.SECRET_KEY)
.build();
}
}
2. 实体类
@Data
@Component
@ConfigurationProperties(value = "minio")
public class MinioProperties implements InitializingBean {
private String endpoint;
private String bucket;
private String accessKey;
private String secretKey;
public static String ENDPOINT;
public static String BUCKET;
public static String ACCESS_KEY;
public static String SECRET_KEY;
@Override
public void afterPropertiesSet() throws Exception {
ENDPOINT = endpoint;
BUCKET = bucket;
SECRET_KEY = secretKey;
ACCESS_KEY = accessKey;
}
}
3. 工具类
import io.minio.BucketExistsArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.RemoveObjectArgs;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
@Slf4j
public class MinioUtil {
@Resource
private MinioClient minioClient;
private final static String separator = "/";
private static final String domain="域名地址";
public String builderFilePath(String dirPath, String fileName) {
StringBuilder stringBuilder = new StringBuilder(50);
if (!org.springframework.util.StringUtils.isEmpty(dirPath)) {
stringBuilder.append(dirPath).append(separator);
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
String todayStr = simpleDateFormat.format(new Date());
stringBuilder.append(todayStr).append(separator);
stringBuilder.append(fileName);
return stringBuilder.toString();
}
/**
* 查看存储bucket是否存在
* @return boolean
*/
public Boolean bucketExists(String bucketName) {
Boolean found;
try {
found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
} catch (Exception e) {
e.printStackTrace();
return false;
}
return found;
}
/**
* 根据路径删除文件
*
* @return boolean
*/
public boolean removeObject(String path) {
int tiktokIndex = path.indexOf("tiktok");
if (tiktokIndex == -1) {
// 如果未找到 "tiktok",返回错误信息
return false;
}
String filePath = path.substring(tiktokIndex + "tiktok".length());
String bucket = MinioProperties.BUCKET;
try {
boolean exists = bucketExists(bucket);
if (exists) {
minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucket).object(filePath).build());
return true;
}
} catch (Exception e) {
log.error("removeObject", e);
}
return false;
}
/**
* 文件上传
*
* @param file 文件
* @return Boolean
*/
public String upload(MultipartFile file,String dirPath) {
String originalFilename = file.getOriginalFilename();
if (StringUtils.isBlank(originalFilename)){
throw new RuntimeException();
}
// String fileName = originalFilename.substring(0,originalFilename.indexOf("."));
String filePath = builderFilePath(dirPath,originalFilename);
try {
PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(MinioProperties.BUCKET).object(filePath)
.stream(file.getInputStream(), file.getSize(), -1).contentType(file.getContentType()).build();
//文件名称相同会覆盖
minioClient.putObject(objectArgs);
} catch (Exception e) {
e.printStackTrace();
return null;
}
return "http://"+domain+MinioProperties.BUCKET+separator+filePath;
}
}