fix: OSS URL store object key only, not absolute path

- OssClient.UploadBytes/UploadText now return object key (relative path)
- Add OssClient.BuildObjectKey method as canonical key builder
- OssClient.BuildObjectUrl preserved for direct-link scenarios
- OssPathUtils.BuildRuleYamlKey/BuildRuleValidationReportKey accept Region
- DB migration: convert 20 existing absolute URLs to object keys
This commit is contained in:
wren
2026-04-28 12:29:01 +08:00
parent 2d108c8381
commit a4169e237e
2 changed files with 19 additions and 7 deletions
@@ -73,7 +73,7 @@ class OssClient:
length=len(Content),
content_type=ContentType,
)
return self.BuildObjectUrl(ObjectKey=ObjectKey, Bucket=TargetBucket)
return self.BuildObjectKey(ObjectKey)
def UploadText(
self,
@@ -174,12 +174,22 @@ class OssClient:
return False
def BuildObjectUrl(self, ObjectKey: str, Bucket: str | None = None) -> str:
"""构造对象访问地址"""
"""构造对象访问地址(绝对 URL — 仅用于需要直链的场景)。
Prefer :meth:`BuildObjectKey` for stored references.
"""
TargetBucket = Bucket or self.bucket
if self.baseUrl:
return f"{self.baseUrl}/{TargetBucket}/{ObjectKey.lstrip('/')}"
return f"oss://{TargetBucket}/{ObjectKey.lstrip('/')}"
def BuildObjectKey(self, ObjectKey: str) -> str:
"""返回规范化的 object key(相对路径,不包含 bucket/host)。
这是推荐的存储格式——不含协议和主机名,迁移 OSS 实例时无需更新数据库。
"""
return ObjectKey.lstrip("/")
def PresignGetUrl(self, Source: str, Bucket: str | None = None) -> str:
"""生成对象下载签名 URL。"""
Ref = self.ResolveObjectRef(Source=Source, Bucket=Bucket)