MinIO
.ymi配置文件
# Miniio配置
minio:
endpoint:
port:
accessKey:
secretKey:
secure: f
bucketName:
configDir:
配置类
@Service
@Slf4j
public class SysFileServiceImpl implements ISysFileService {
@Autowired
MinioConfig minioConfig;
/**
* 文件上传至Minio
* 使用try catch finally进行上传
* finally里进行资源的回收
*/
@SneakyThrows
@Override
public AjaxResult upload(MultipartFile file) {
InputStream inputStream = null;
//创建Minio的连接对象
MinioClient minioClient = getClient();
String bucketName = minioConfig.getBucketName();
try {
// 获取文件输入流
inputStream = file.getInputStream();
// 若Bucket不存在, 则创建
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!found) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
} else {
System.out.println("Bucket 'asiatrip' already exists.");
}
// 获取上传的文件名称
String filename = file.getOriginalFilename();
// 生成新的文件名称
assert filename != null;
String newFileName = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date()) + UUIDUtils.getUUID() + filename.substring(filename.lastIndexOf("."));
// URL格式: http://ip:port/URI
String url = "http://" + minioConfig.getEndpoint() + ":" + minioConfig.getPort() + "/" + bucketName + "/" + newFileName;
// 上传文件
minioClient.putObject(PutObjectArgs.builder()
.bucket(minioConfig.getBucketName())
.object(newFileName)
.stream(inputStream, file.getSize(), - 1)
.contentType(file.getContentType())
.build());
// 返回结果封装
AjaxResult ajaxResult = AjaxResult.success();
ajaxResult.put("fileName", bucketName + newFileName);
ajaxResult.put("url", url);
return ajaxResult;
} catch (Exception e) {
// 上传失败,
e.printStackTrace();
log.debug("文件上传失败: {}", e.getMessage());
return AjaxResult.error("上传失败");
} finally {
//防止内存泄漏
if (inputStream != null) {
try {
inputStream.close(); // 关闭流
} catch (IOException e) {
log.debug("inputStream close IOException:" + e.getMessage());
}
}
}
}
/**
* 获取Minio连接
*/
private MinioClient getClient() {
return MinioClient.builder()
.endpoint("http://" + minioConfig.getEndpoint() + ":" + minioConfig.getPort())
.credentials(minioConfig.getAccessKey(), minioConfig.getSecretKey())
.build();
}
}