审核模块相关接口开发

This commit is contained in:
2025-07-16 11:03:25 +08:00
parent 7c4b5e71e9
commit 16c1b403ed
23 changed files with 758 additions and 538 deletions

View File

@@ -1,9 +1,6 @@
package com.zg.common.utils;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.MakeBucketArgs;
import io.minio.BucketExistsArgs;
import io.minio.*;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@@ -13,6 +10,9 @@ import javax.annotation.PostConstruct;
import java.io.InputStream;
import java.util.UUID;
/**
* MinIO 工具类(支持上传并设置 bucket 公共访问权限)
*/
@Component
public class MinioUtil {
@@ -39,41 +39,72 @@ public class MinioUtil {
}
/**
* 上传文件到指定 bucket
* @param file 文件
* 上传文件到指定 bucket 的指定目录(自动设置公共权限)
*
* @param file 上传的文件
* @param bucketName bucket 名称
* @return 返回访问URL
* @param folder 目录前缀(如 "signature/"
* @return 返回公网可访问的 URL
* @throws Exception 异常
*/
public String upload(MultipartFile file, String bucketName) throws Exception {
public String upload(MultipartFile file, String bucketName, String folder) throws Exception {
String originalName = file.getOriginalFilename();
String ext = originalName != null && originalName.contains(".")
? originalName.substring(originalName.lastIndexOf("."))
: "";
String objectName = UUID.randomUUID().toString().replace("-", "") + ext;
String objectName = folder + UUID.randomUUID().toString().replace("-", "") + ext;
InputStream in = file.getInputStream();
try (InputStream in = file.getInputStream()) {
// 如果 bucket 不存在,则创建
boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!exists) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
// 自动创建 bucket(如果不存在
boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!exists) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
// 强制设置 bucket 策略为 public-read幂等
String policyJson = "{\n" +
" \"Version\":\"2012-10-17\",\n" +
" \"Statement\":[\n" +
" {\n" +
" \"Effect\":\"Allow\",\n" +
" \"Principal\":{\"AWS\":\"*\"},\n" +
" \"Action\":[\"s3:GetObject\"],\n" +
" \"Resource\":[\"arn:aws:s3:::" + bucketName + "/*\"]\n" +
" }\n" +
" ]\n" +
"}";
minioClient.setBucketPolicy(
SetBucketPolicyArgs.builder()
.bucket(bucketName)
.config(policyJson)
.build()
);
// 上传文件
minioClient.putObject(PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.stream(in, file.getSize(), -1)
.contentType(file.getContentType())
.build());
}
// 上传文件
minioClient.putObject(PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.stream(in, file.getSize(), -1)
.contentType(file.getContentType())
.build());
return endpoint + "/" + bucketName + "/" + objectName;
}
/**
* 上传到默认 bucket
* 上传文件到默认 bucket 根目录
*/
public String upload(MultipartFile file) throws Exception {
return upload(file, defaultBucket);
return upload(file, defaultBucket, "");
}
/**
* 上传文件到默认 bucket 指定目录
*/
public String upload(MultipartFile file, String folder) throws Exception {
return upload(file, defaultBucket, folder);
}
}