feat(backend): Improve tag management and media resource access

This commit is contained in:
2026-04-22 16:43:40 +08:00
parent 9820d2f020
commit a6ae978ed0
13 changed files with 216 additions and 18 deletions
@@ -50,12 +50,66 @@ public class MinioUtils {
if (!exists) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
ensureBucketPublicRead(bucketName);
} catch (Exception e) {
log.error("创建存储桶失败:", e);
throw new RuntimeException("创建存储桶失败", e);
}
}
/**
* 确保存储桶支持匿名读取,便于前端直接访问视频和封面资源
*/
public void ensureBucketPublicRead(String bucketName) {
try {
String policy = """
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::%s"
]
},
{
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::%s/*"
]
}
]
}
""".formatted(bucketName, bucketName);
minioClient.setBucketPolicy(
SetBucketPolicyArgs.builder()
.bucket(bucketName)
.config(policy)
.build()
);
} catch (Exception e) {
log.error("设置存储桶公开读取策略失败:bucket={}", bucketName, e);
throw new RuntimeException("设置存储桶公开读取策略失败", e);
}
}
/**
* 列出所有存储桶
*/
@@ -244,4 +298,4 @@ public class MinioUtils {
return objectName;
}
}
}