fix: normalize tuhui asset urls

This commit is contained in:
2026-03-10 13:40:54 +08:00
parent 64571f4544
commit 7aa2dff569

View File

@@ -10,6 +10,7 @@ import mimetypes
from dataclasses import dataclass
from pathlib import Path
from typing import Iterator, Optional
from urllib.parse import urlparse
from dotenv import load_dotenv
logger = logging.getLogger(__name__)
@@ -89,6 +90,36 @@ class TuhuiUploadService:
def _build_work_url(work_id: int) -> str:
return f"{TUHUI_WEB_BASE_URL}/detail/{int(work_id)}"
@staticmethod
def _normalize_asset_url(raw_url: str) -> str:
url = str(raw_url or "").strip()
if not url:
return ""
if url.startswith("/"):
return f"{TUHUI_WEB_BASE_URL}{url}"
parsed = urlparse(url)
if not parsed.scheme or not parsed.netloc:
return url
host = (parsed.netloc or "").lower()
if host in {
"tuhui.cloud",
"www.tuhui.cloud",
"aidg168.uk",
"www.aidg168.uk",
"156.226.181.204:8002",
"1.12.50.92:8002",
"127.0.0.1:8002",
}:
path = parsed.path or ""
if parsed.query:
path = f"{path}?{parsed.query}"
if parsed.fragment:
path = f"{path}#{parsed.fragment}"
return f"{TUHUI_WEB_BASE_URL}{path}"
return url
@staticmethod
def _guess_file_meta(image_path: str) -> tuple[str, str]:
path = Path(image_path)
@@ -214,11 +245,13 @@ class TuhuiUploadService:
)
work_id = int(payload.get("work_id") or payload.get("work", {}).get("id") or 0)
image_url = str(payload.get("image_url") or payload.get("work", {}).get("original_image") or "")
thumbnail_url = str(
image_url = self._normalize_asset_url(
payload.get("image_url") or payload.get("work", {}).get("original_image") or ""
)
thumbnail_url = self._normalize_asset_url(
payload.get("thumbnail_url") or payload.get("work", {}).get("thumbnail_image") or ""
)
watermarked_url = str(
watermarked_url = self._normalize_asset_url(
payload.get("watermarked_url") or payload.get("work", {}).get("watermarked_image") or ""
)
download_url = self._build_work_url(work_id) if work_id else ""