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 dataclasses import dataclass
from pathlib import Path from pathlib import Path
from typing import Iterator, Optional from typing import Iterator, Optional
from urllib.parse import urlparse
from dotenv import load_dotenv from dotenv import load_dotenv
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -89,6 +90,36 @@ class TuhuiUploadService:
def _build_work_url(work_id: int) -> str: def _build_work_url(work_id: int) -> str:
return f"{TUHUI_WEB_BASE_URL}/detail/{int(work_id)}" 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 @staticmethod
def _guess_file_meta(image_path: str) -> tuple[str, str]: def _guess_file_meta(image_path: str) -> tuple[str, str]:
path = Path(image_path) 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) 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 "") image_url = self._normalize_asset_url(
thumbnail_url = str( 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 "" 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 "" payload.get("watermarked_url") or payload.get("work", {}).get("watermarked_image") or ""
) )
download_url = self._build_work_url(work_id) if work_id else "" download_url = self._build_work_url(work_id) if work_id else ""