fix(oss): 修复MinIO SDK配置避免region空指针异常

- 调整MinIO客户端配置,使用 OSSClientBuilder 的链式调用构建
- 明确指定region为"us-east-1",防止自定义域名推导region失败导致NPE
- 保持SignatureVersion为V4,启用从endpoint提取配置信息以支持path-style访问
- 统一AliOssController和FileRecordServiceImpl中的MinIO配置逻辑
This commit is contained in:
2026-08-07 02:54:21 +08:00
parent 49e6cd2197
commit 18696f91a6
2 changed files with 16 additions and 6 deletions

View File

@@ -121,11 +121,16 @@ public class AliOssController extends BaseController {
OSS ossClient;
if ("minio".equals(uploadMethod)) {
ClientBuilderConfiguration minioConfig = new ClientBuilderConfiguration();
// 3.17 已移除 setPathStyleAccess用 setExtractSettingFromEndpoint 让 SDK 对 MinIO 这类
// 非阿里云 endpoint 自动按 path-style 访问,并从 endpoint 推导 region
// MinIO 兼容 S3V4 签名 + path-style。自定义域名无法从 endpoint 推导 region
// 必须显式指定MinIO 默认 us-east-1否则 OSSV4Signer.getRegion() 为 null 触发 NPE。
minioConfig.setSignatureVersion(SignVersion.V4);
minioConfig.setExtractSettingFromEndpoint(true);
ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider, minioConfig);
ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(minioConfig)
.region("us-east-1")
.build();
} else {
ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
}

View File

@@ -101,11 +101,16 @@ public class FileRecordServiceImpl extends ServiceImpl<FileRecordMapper, FileRec
OSS ossClient;
if ("minio".equals(uploadMethod)) {
ClientBuilderConfiguration minioConfig = new ClientBuilderConfiguration();
// 3.17 已移除 setPathStyleAccess用 setExtractSettingFromEndpoint 让 SDK 对 MinIO 这类
// 非阿里云 endpoint 自动按 path-style 访问,并从 endpoint 推导 region
// MinIO 兼容 S3V4 签名 + path-style。自定义域名无法从 endpoint 推导 region
// 必须显式指定MinIO 默认 us-east-1否则 OSSV4Signer.getRegion() 为 null 触发 NPE。
minioConfig.setSignatureVersion(SignVersion.V4);
minioConfig.setExtractSettingFromEndpoint(true);
ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider, minioConfig);
ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(minioConfig)
.region("us-east-1")
.build();
} else {
ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
}