diff --git a/services/service_tuhui_upload.py b/services/service_tuhui_upload.py index 475088f..76d52c1 100644 --- a/services/service_tuhui_upload.py +++ b/services/service_tuhui_upload.py @@ -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 ""