Files
life-echo/api/app/core/cos_url_keys.py

44 lines
1.3 KiB
Python
Raw Normal View History

2026-03-20 15:15:35 +08:00
"""从 URL 解析当前环境腾讯云 COS object key仅当 host 与配置一致时)。"""
from urllib.parse import urlparse
from app.core.config import settings
def extract_cos_object_key_if_owned(url: str | None) -> str | None:
"""
url 指向 settings 中配置的 COS 域名返回去掉前导 / object key
http(s) host 不匹配时返回 None
"""
if not url:
return None
s = str(url).strip()
if not s.startswith(("http://", "https://")):
return None
parsed = urlparse(s)
host = (parsed.netloc or "").lower()
if not host:
return None
candidates: list[str] = []
bucket = (settings.tencent_cos_bucket or "").strip().lower()
region = (settings.tencent_cos_region or "").strip().lower()
if bucket and region:
candidates.append(f"{bucket}.cos.{region}.myqcloud.com")
base = (settings.tencent_cos_base_url or "").strip()
if base:
base_parsed = urlparse(base if "://" in base else f"https://{base}")
bh = (base_parsed.netloc or "").lower()
if bh:
candidates.append(bh)
if not candidates:
return None
matched = any(host == c for c in candidates if c)
if not matched:
return None
key = (parsed.path or "").lstrip("/")
return key or None