From 969283690fb1cc8d530402236bd2f0262dbd939c Mon Sep 17 00:00:00 2001 From: seaislee1209 Date: Mon, 23 Mar 2026 18:26:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=B4=A0=E6=9D=90=20API=20=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E4=BF=A1=E6=81=AF=E4=B8=AD=E6=96=87=E6=98=A0=E5=B0=84?= =?UTF-8?q?=EF=BC=88=E5=90=8C=20Seedance=20=E6=A8=A1=E5=BC=8F=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AssetsAPIError 加 user_message,按 code/关键词映射中文提示,用户不再看到英文错误 Co-Authored-By: Claude Opus 4.6 (1M context) --- backend/apps/generation/views.py | 4 +--- backend/utils/assets_client.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/backend/apps/generation/views.py b/backend/apps/generation/views.py index 61ec22e..91c9de5 100644 --- a/backend/apps/generation/views.py +++ b/backend/apps/generation/views.py @@ -2726,10 +2726,8 @@ def _assets_api_call(func, *args, **kwargs): return result, None except AssetsAPIError as e: logger.warning('Assets API error: %s', e) - # Surface readable message for known parameter errors - msg = e.api_message if hasattr(e, 'api_message') else str(e) return None, Response( - {'error': 'assets_api_error', 'message': msg}, + {'error': 'assets_api_error', 'message': e.user_message}, status=status.HTTP_502_BAD_GATEWAY, ) except Exception as e: diff --git a/backend/utils/assets_client.py b/backend/utils/assets_client.py index a5f54e8..5c6048c 100644 --- a/backend/utils/assets_client.py +++ b/backend/utils/assets_client.py @@ -21,12 +21,41 @@ HOST = 'open.volcengineapi.com' PROJECT_NAME = 'int_dev_Airlabs' +_ASSETS_ERROR_MESSAGES = { + 'ConfigError': '素材服务未配置,请联系管理员', + 'RequestError': '素材服务暂时不可用,请稍后重试', + 'InvalidParameter': '素材参数无效,请检查输入', + 'NotFound': '素材不存在或已被删除', + 'NotExist': '素材不存在或已被删除', + 'InternalError': '素材服务异常,请稍后重试', + 'Forbidden': '没有权限操作该素材', + 'RateLimitExceeded': '操作过于频繁,请稍后重试', +} + +_ASSETS_MESSAGE_KEYWORDS = { + 'dimension': '图片尺寸不符合要求(宽高需在 300~6000 像素之间)', + 'size': '文件大小超出限制', + 'format': '不支持的文件格式', + 'not found': '素材不存在或已被删除', + 'permission': '没有权限操作该素材', +} + + class AssetsAPIError(Exception): """Raised when the Assets API returns an error.""" def __init__(self, code, message, status_code=400): self.code = code self.api_message = message self.status_code = status_code + # 中文友好提示 + friendly = _ASSETS_ERROR_MESSAGES.get(code) + if not friendly: + msg_lower = (message or '').lower() + for keyword, hint in _ASSETS_MESSAGE_KEYWORDS.items(): + if keyword in msg_lower: + friendly = hint + break + self.user_message = friendly or '素材操作失败,请稍后重试' super().__init__(f'[{code}] {message}')