修复工作

This commit is contained in:
2025-09-30 19:23:42 +08:00
parent 0f7dc58a50
commit 1323c1f717

View File

@@ -0,0 +1,153 @@
package com.ruoyi.framework.service.impl;
import com.ruoyi.framework.config.MinioProperties;
import com.ruoyi.framework.service.MinioService;
import io.minio.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.UUID;
/**
* MinIO服务实现类
*/
@Service
@ConditionalOnProperty(name = "minio.enabled", havingValue = "true")
public class MinioServiceImpl implements MinioService {
private static final Logger log = LoggerFactory.getLogger(MinioServiceImpl.class);
@Autowired
private MinioProperties minioProperties;
private MinioClient minioClient;
private MinioClient getMinioClient() {
if (minioClient == null) {
minioClient = MinioClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
.build();
}
return minioClient;
}
@Override
public String putObject(String bucketName, String objectName, InputStream inputStream) {
try {
// 确保bucket存在
ensureBucketExists(bucketName);
// 上传对象
getMinioClient().putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.stream(inputStream, -1, 10485760)
.build()
);
// 返回访问URL
return minioProperties.getEndpoint() + "/" + bucketName + "/" + objectName;
} catch (Exception e) {
log.error("上传对象到MinIO失败: bucket={}, object={}", bucketName, objectName, e);
throw new RuntimeException("上传对象失败: " + e.getMessage(), e);
}
}
@Override
public InputStream getObject(String bucketName, String objectName) {
try {
return getMinioClient().getObject(
GetObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.build()
);
} catch (Exception e) {
log.error("从MinIO获取对象失败: bucket={}, object={}", bucketName, objectName, e);
throw new RuntimeException("获取对象失败: " + e.getMessage(), e);
}
}
@Override
public void removeObject(String bucketName, String objectName) {
try {
getMinioClient().removeObject(
RemoveObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.build()
);
} catch (Exception e) {
log.error("从MinIO删除对象失败: bucket={}, object={}", bucketName, objectName, e);
throw new RuntimeException("删除对象失败: " + e.getMessage(), e);
}
}
@Override
public boolean objectExists(String bucketName, String objectName) {
try {
getMinioClient().statObject(
StatObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.build()
);
return true;
} catch (Exception e) {
return false;
}
}
@Override
public String getObjectUrl(String bucketName, String objectName) {
return minioProperties.getEndpoint() + "/" + bucketName + "/" + objectName;
}
@Override
public UploadResult upload(MultipartFile file) throws Exception {
String originalFilename = file.getOriginalFilename();
String objectName = generateObjectName(originalFilename);
String url = putObject(minioProperties.getBucket(), objectName, file.getInputStream());
return new UploadResult(objectName, url);
}
@Override
public UploadResult uploadWithName(MultipartFile file, String objectName) throws Exception {
String url = putObject(minioProperties.getBucket(), objectName, file.getInputStream());
return new UploadResult(objectName, url);
}
/**
* 确保bucket存在
*/
private void ensureBucketExists(String bucketName) throws Exception {
boolean exists = getMinioClient().bucketExists(
BucketExistsArgs.builder().bucket(bucketName).build()
);
if (!exists) {
getMinioClient().makeBucket(
MakeBucketArgs.builder().bucket(bucketName).build()
);
log.info("创建MinIO bucket: {}", bucketName);
}
}
/**
* 生成对象名称
*/
private String generateObjectName(String originalFilename) {
String ext = "";
if (originalFilename != null && originalFilename.contains(".")) {
ext = originalFilename.substring(originalFilename.lastIndexOf("."));
}
return UUID.randomUUID().toString().replace("-", "") + ext;
}
}