From 64b4ad99fccc3075e4c88e23a3703c4aae1258d6 Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Tue, 13 Oct 2026 22:36:14 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E5=A4=96=E7=BD=91=E9=A2=84=E7=AD=BE?= =?UTF-8?q?=E5=90=8D=E5=9B=BA=E5=AE=9A=20MinIO=20region=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=20GetBucketLocation=20=E8=A7=A3=E6=9E=90=E5=88=B0=20H?= =?UTF-8?q?TML?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../file/service/impl/MinioFileServiceImpl.java | 8 ++++++++ .../transport/service/impl/VoucherManageServiceImpl.java | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/blade-service/blade-file/src/main/java/org/springblade/file/service/impl/MinioFileServiceImpl.java b/blade-service/blade-file/src/main/java/org/springblade/file/service/impl/MinioFileServiceImpl.java index bc85679a..45741733 100644 --- a/blade-service/blade-file/src/main/java/org/springblade/file/service/impl/MinioFileServiceImpl.java +++ b/blade-service/blade-file/src/main/java/org/springblade/file/service/impl/MinioFileServiceImpl.java @@ -65,6 +65,8 @@ import java.util.UUID; public class MinioFileServiceImpl extends AbstractFileService { private static final long PART_SIZE = 10 * 1024 * 1024L; + /** MinIO 默认 region;固定后预签名无需再请求外网域名做 GetBucketLocation */ + private static final String DEFAULT_REGION = "us-east-1"; private final FileStorageProperties.StoreProperties properties; private final MinioClient minioClient; @@ -82,6 +84,7 @@ public class MinioFileServiceImpl extends AbstractFileService { .method(Method.PUT) .bucket(properties.getBucketName()) .object(partObjectKey(objectKey, uploadId, partNumber)) + .region(DEFAULT_REGION) .expiry(Math.toIntExact(resolveExpires(expires))) .build()); return applyTransformPathPrefix(presignedUrl); @@ -186,6 +189,7 @@ public class MinioFileServiceImpl extends AbstractFileService { .method(Method.GET) .bucket(properties.getBucketName()) .object(resolveObjectKey(objectKey)) + .region(DEFAULT_REGION) .expiry(Math.toIntExact(resolveExpires(expires))) .build()); return applyTransformPathPrefix(presignedUrl); @@ -212,7 +216,10 @@ public class MinioFileServiceImpl extends AbstractFileService { /** * 浏览器侧预签名优先使用外网地址,避免 HTTPS 页面访问 HTTP MinIO 被 Mixed Content 拦截。 + *

* MinIO SDK 不允许 endpoint 带 path,因此外网地址中的 /oss 等前缀在签名后单独拼回。 + * 外网域名通常是业务网关而非直连 MinIO,必须固定 region,否则 SDK 会请求 GetBucketLocation + * 并拿到 HTML 页面导致 XmlParserException。 */ private MinioClient resolvePresignClient() { String transformEndpoint = properties.getTransformEndpoint(); @@ -228,6 +235,7 @@ public class MinioFileServiceImpl extends AbstractFileService { transformPresignClient = MinioClient.builder() .endpoint(resolveTransformOrigin(transformEndpoint)) .credentials(properties.getAccessKeyId(), properties.getAccessKeySecret()) + .region(DEFAULT_REGION) .build(); } return transformPresignClient; diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/VoucherManageServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/VoucherManageServiceImpl.java index 16d35e08..6f6b7d4e 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/VoucherManageServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/VoucherManageServiceImpl.java @@ -1501,7 +1501,9 @@ public class VoucherManageServiceImpl extends BaseServiceImpl