fix(storage): 规范化endpoint并指定MinIO客户端region
- 去除endpoint结尾斜杠,避免minio-java拼接双斜杠导致签名不匹配 - MinIO客户端构建时显式指定region为us-east-1 - 跳过MinIO SDK的自动getBucketLocation探测,避免反向代理环境下签名验证失败 - 修改AliOssController和FileRecordServiceImpl中相关代码逻辑
This commit is contained in:
@@ -102,6 +102,11 @@ public class AliOssController extends BaseController {
|
|||||||
String accessKeySecret = settingInfo.getString("accessKeySecret");
|
String accessKeySecret = settingInfo.getString("accessKeySecret");
|
||||||
String uploadMethod = settingInfo.getString("uploadMethod");
|
String uploadMethod = settingInfo.getString("uploadMethod");
|
||||||
|
|
||||||
|
// 规范化 endpoint:去掉结尾斜杠,避免 minio-java 拼接出双斜杠导致签名不匹配
|
||||||
|
if (StrUtil.isNotBlank(endpoint) && endpoint.endsWith("/")) {
|
||||||
|
endpoint = endpoint.substring(0, endpoint.length() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
// 判断是否登录
|
// 判断是否登录
|
||||||
String authorization = getAuthorization();
|
String authorization = getAuthorization();
|
||||||
|
|
||||||
@@ -123,9 +128,12 @@ public class AliOssController extends BaseController {
|
|||||||
OSS ossClient = null;
|
OSS ossClient = null;
|
||||||
MinioClient minioClient = null;
|
MinioClient minioClient = null;
|
||||||
if (isMinio) {
|
if (isMinio) {
|
||||||
|
// 显式指定 region=us-east-1,跳过 minio-java 的 getBucketLocation 自动探测
|
||||||
|
// (该探测 GET 在 MinIO + 反代下会触发 SignatureDoesNotMatch)
|
||||||
minioClient = MinioClient.builder()
|
minioClient = MinioClient.builder()
|
||||||
.endpoint(endpoint)
|
.endpoint(endpoint)
|
||||||
.credentials(accessKeyId, accessKeySecret)
|
.credentials(accessKeyId, accessKeySecret)
|
||||||
|
.region("us-east-1")
|
||||||
.build();
|
.build();
|
||||||
} else {
|
} else {
|
||||||
CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret);
|
CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret);
|
||||||
|
|||||||
@@ -98,14 +98,20 @@ public class FileRecordServiceImpl extends ServiceImpl<FileRecordMapper, FileRec
|
|||||||
String accessKeyId = uploadConfig.getString("accessKeyId");
|
String accessKeyId = uploadConfig.getString("accessKeyId");
|
||||||
String accessKeySecret = uploadConfig.getString("accessKeySecret");
|
String accessKeySecret = uploadConfig.getString("accessKeySecret");
|
||||||
String uploadMethod = uploadConfig.getString("uploadMethod");
|
String uploadMethod = uploadConfig.getString("uploadMethod");
|
||||||
|
// 规范化 endpoint:去掉结尾斜杠,避免 minio-java 拼接出双斜杠导致签名不匹配
|
||||||
|
if (StrUtil.isNotBlank(endpoint) && endpoint.endsWith("/")) {
|
||||||
|
endpoint = endpoint.substring(0, endpoint.length() - 1);
|
||||||
|
}
|
||||||
boolean isMinio = "minio".equals(uploadMethod);
|
boolean isMinio = "minio".equals(uploadMethod);
|
||||||
OSS ossClient = null;
|
OSS ossClient = null;
|
||||||
MinioClient minioClient = null;
|
MinioClient minioClient = null;
|
||||||
if (isMinio) {
|
if (isMinio) {
|
||||||
// MinIO 用官方 minio-java SDK(原生 AWS4 + path-style),aliyun OSS SDK 无法对接 MinIO
|
// MinIO 用官方 minio-java SDK(原生 AWS4 + path-style),aliyun OSS SDK 无法对接 MinIO
|
||||||
|
// 显式指定 region=us-east-1,跳过 getBucketLocation 自动探测(该探测 GET 会触发 SignatureDoesNotMatch)
|
||||||
minioClient = MinioClient.builder()
|
minioClient = MinioClient.builder()
|
||||||
.endpoint(endpoint)
|
.endpoint(endpoint)
|
||||||
.credentials(accessKeyId, accessKeySecret)
|
.credentials(accessKeyId, accessKeySecret)
|
||||||
|
.region("us-east-1")
|
||||||
.build();
|
.build();
|
||||||
} else {
|
} else {
|
||||||
CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret);
|
CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret);
|
||||||
|
|||||||
Reference in New Issue
Block a user