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}')