🐛 外网预签名固定 MinIO region,避免 GetBucketLocation 解析到 HTML

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-13 22:36:14 +08:00
parent 7c7fe2e1c1
commit 64b4ad99fc
2 changed files with 13 additions and 1 deletions
@@ -1501,7 +1501,9 @@ public class VoucherManageServiceImpl extends BaseServiceImpl<VoucherManageMappe
private String buildVoucherFileUrl(Long fileId, String objectKey) {
try {
String presignedUrl = resolvePresignClient().getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
.method(Method.GET).bucket(minioBucketName).object(objectKey).expiry(1, java.util.concurrent.TimeUnit.HOURS).build());
.method(Method.GET).bucket(minioBucketName).object(objectKey)
.region("us-east-1")
.expiry(1, java.util.concurrent.TimeUnit.HOURS).build());
return applyTransformPathPrefix(presignedUrl);
} catch (Exception exception) {
log.warn("生成凭证文件预览地址失败 voucherFileId={}, objectKey={}", fileId, objectKey, exception);
@@ -1511,6 +1513,7 @@ public class VoucherManageServiceImpl extends BaseServiceImpl<VoucherManageMappe
/**
* 浏览器预签名优先使用外网地址,避免 HTTPS 页面访问 HTTP MinIO 被 Mixed Content 拦截。
* 外网域名通常是业务网关,必须固定 region,否则 SDK 会请求 GetBucketLocation 并解析到 HTML。
*/
private MinioClient resolvePresignClient() {
if (Func.isEmpty(minioTransformEndpoint)) {
@@ -1525,6 +1528,7 @@ public class VoucherManageServiceImpl extends BaseServiceImpl<VoucherManageMappe
transformPresignClient = MinioClient.builder()
.endpoint(org.springblade.transport.config.VoucherMinioConfig.resolveClientEndpoint(minioTransformEndpoint))
.credentials(minioAccessKey, minioSecretKey)
.region("us-east-1")
.build();
}
return transformPresignClient;