update 优化 oss 协议头拼接写法

This commit is contained in:
疯狂的狮子Li
2026-06-26 10:21:09 +08:00
parent 802d3ecd3e
commit cd20a7bca2
@@ -1,6 +1,5 @@
package org.dromara.common.oss.config;
import cn.hutool.http.HttpUtil;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.RequiredArgsConstructor;
@@ -196,8 +195,8 @@ public class OssClientConfig implements Config<OssClientConfig, OssClientConfig.
public String getDomainUrl() {
return domain()
// 如果已经配置了自定义域名,则优先使用域名
// 检查携带协议头
.filter(OssClientConfig::hasHttpHeader)
.filter(StringUtils::isNotBlank)
.map(domain -> BucketUrlUtil.rebuildUrlHeader(useHttps, domain.trim()))
// 否则使用站点
.orElseGet(this::getEndpointUrl);
}
@@ -226,6 +225,12 @@ public class OssClientConfig implements Config<OssClientConfig, OssClientConfig.
return usePathStyleAccess ? BucketUrlUtil.getPathStyleBucketUrl(useHttps, url, bucket) : BucketUrlUtil.getSiteStyleBucketUrl(useHttps, url, bucket);
}
/**
* 解析 S3 Region。
*
* @param regionString Region 字符串
* @return Region 对象
*/
private static Region parseRegion(String regionString) {
if (StringUtils.isBlank(regionString)) {
return Region.US_EAST_1;
@@ -233,11 +238,23 @@ public class OssClientConfig implements Config<OssClientConfig, OssClientConfig.
return Region.of(regionString);
}
/**
* 兼容旧配置推断是否使用路径风格访问。
*
* @param properties OSS 配置属性
* @return 是否使用路径风格访问
*/
private static boolean resolvePathStyleAccess(OssProperties properties) {
// 旧配置没有显式路径风格字段,只能继续按内置云厂商 endpoint 做兼容推断。
return !StringUtils.containsAny(properties.getEndpoint(), OssConstant.CLOUD_SERVICE);
}
/**
* 解析 ACL 访问策略配置。
*
* @param accessPolicyString 访问策略字符串
* @return ACL 访问策略配置
*/
private static AccessControlPolicyConfig resolveAccessControlPolicy(String accessPolicyString) {
// 绝大多数云厂商不允许操作 ACL,默认禁用;当前业务只用访问策略判断是否生成预签名 URL。
if (StringUtils.isBlank(accessPolicyString)) {
@@ -249,22 +266,29 @@ public class OssClientConfig implements Config<OssClientConfig, OssClientConfig.
.build();
}
/**
* 获取用于访问对象的基础 URL。
*
* @return 基础 URL
*/
private String getAccessBaseUrl() {
return domain()
.filter(OssClientConfig::hasHttpHeader)
.filter(StringUtils::isNotBlank)
.map(String::trim)
.orElseGet(this::getEndpoint);
}
/**
* 获取 endpoint 配置。
*
* @return endpoint
*/
private String getEndpoint() {
return endpoint()
.filter(s -> !s.isBlank())
.orElseThrow(() -> S3StorageException.form("endpoint is not configured."));
}
private static boolean hasHttpHeader(String url) {
return HttpUtil.isHttp(url) || HttpUtil.isHttps(url);
}
/**
* ACL访问策略配置
*/