0729接口逻辑修改

This commit is contained in:
2025-07-29 16:18:53 +08:00
parent 0696040874
commit 20f6be7790
17 changed files with 225 additions and 686 deletions

View File

@@ -8,16 +8,11 @@ import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.InputStream;
import java.util.Base64;
import java.util.UUID;
import java.util.Date;
/**
* MinIO 工具类(支持上传并设置 bucket 公共访问权限)
*/
@Component
public class MinioUtil {
@@ -44,29 +39,30 @@ public class MinioUtil {
}
/**
* 上传文件到指定 bucket 的指定目录(自动设置公共权限)
*
* @param file 上传的文件
* @param bucketName bucket 名称
* @param folder 目录前缀(如 "signature/"
* @return 返回公网可访问的 URL
* @throws Exception 异常
* 自动生成今日目录yyyy-MM-dd/
*/
private String getTodayFolder() {
return DateUtils.parseDateToStr("yyyy-MM-dd", DateUtils.getNowDate()) + "/";
}
/**
* 上传文件到指定 bucket 和目录
*/
public String upload(MultipartFile file, String bucketName, String folder) throws Exception {
String originalName = file.getOriginalFilename();
String ext = originalName != null && originalName.contains(".")
String ext = (originalName != null && originalName.contains("."))
? originalName.substring(originalName.lastIndexOf("."))
: "";
String objectName = folder + UUID.randomUUID().toString().replace("-", "") + ext;
try (InputStream in = file.getInputStream()) {
// 如果 bucket 不存在,则创建
// 检查或创建 bucket
boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!exists) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
// 强制设置 bucket 策略为 public-read幂等
// 设置 bucket 公共策略
String policyJson = "{\n" +
" \"Version\":\"2012-10-17\",\n" +
" \"Statement\":[\n" +
@@ -79,14 +75,12 @@ public class MinioUtil {
" ]\n" +
"}";
minioClient.setBucketPolicy(
SetBucketPolicyArgs.builder()
.bucket(bucketName)
.config(policyJson)
.build()
);
minioClient.setBucketPolicy(SetBucketPolicyArgs.builder()
.bucket(bucketName)
.config(policyJson)
.build());
// 上传文件
// 上传
minioClient.putObject(PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
@@ -97,19 +91,21 @@ public class MinioUtil {
return endpoint + "/" + bucketName + "/" + objectName;
}
/**
* 上传 Base64 图片到指定 bucket 和目录
*/
public String uploadBase64(String imgStr, String bucketName, String folder) {
try {
String objectName = folder + UUID.randomUUID().toString().replace("-", "") + ".png";
imgStr = imgStr.replace("data:image/png;base64,", "").replace("data:image/jpeg;base64,", "");
byte[] imageBytes = Base64.getDecoder().decode(imgStr);
// 确保 bucket 存在
boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!exists) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
// 设置公共访问策略(幂等)
String policyJson = "{\n" +
" \"Version\":\"2012-10-17\",\n" +
" \"Statement\":[\n" +
@@ -122,14 +118,11 @@ public class MinioUtil {
" ]\n" +
"}";
minioClient.setBucketPolicy(
SetBucketPolicyArgs.builder()
.bucket(bucketName)
.config(policyJson)
.build()
);
minioClient.setBucketPolicy(SetBucketPolicyArgs.builder()
.bucket(bucketName)
.config(policyJson)
.build());
// 构造 InputStream 上传
try (InputStream inputStream = new java.io.ByteArrayInputStream(imageBytes)) {
minioClient.putObject(PutObjectArgs.builder()
.bucket(bucketName)
@@ -147,17 +140,30 @@ public class MinioUtil {
}
/**
* 上传文件到默认 bucket 根目录
* 默认 bucket 上传
*/
public String upload(MultipartFile file) throws Exception {
return upload(file, defaultBucket, "");
}
/**
* 上传文件到默认 bucket 指定目录
* 默认 bucket 指定目录上传
*/
public String upload(MultipartFile file, String folder) throws Exception {
return upload(file, defaultBucket, folder);
}
/**
* 默认 bucket按日期目录上传MultipartFile
*/
public String uploadToDateFolder(MultipartFile file) throws Exception {
return upload(file, defaultBucket, getTodayFolder());
}
/**
* 默认 bucket按日期目录上传Base64
*/
public String uploadBase64ToDateFolder(String imgStr) {
return uploadBase64(imgStr, defaultBucket, getTodayFolder());
}
}