feat(backend): Improve tag management and media resource access
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user