fix: normalize tuhui asset urls
This commit is contained in:
@@ -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 ""
|
||||
|
||||
Reference in New Issue
Block a user