from fastapi import HTTPException, status class FileTooLargeException(HTTPException): """文件过大异常""" def __init__(self, file_size: int, max_size: int): super().__init__( status_code=status.HTTP_413_REQUEST_ENTITY_TOO_LARGE, detail={ "code": "FILE_TOO_LARGE", "message": f"文件大小 {file_size} 字节超过限制 {max_size} 字节", "file_size": file_size, "max_size": max_size } ) class StorageQuotaExceededException(HTTPException): """存储配额超限异常""" def __init__(self, used_space: int, quota: int, required_space: int): super().__init__( status_code=status.HTTP_413_REQUEST_ENTITY_TOO_LARGE, detail={ "code": "STORAGE_QUOTA_EXCEEDED", "message": f"存储空间不足。已使用: {used_space} 字节,配额: {quota} 字节,需要: {required_space} 字节", "used_space": used_space, "quota": quota, "required_space": required_space } ) class FileAlreadyExistsException(HTTPException): """文件已存在异常""" def __init__(self, filename: str): super().__init__( status_code=status.HTTP_409_CONFLICT, detail={ "code": "FILE_ALREADY_EXISTS", "message": f"文件 '{filename}' 已存在", "filename": filename } ) class FileNotFoundException(HTTPException): """文件未找到异常""" def __init__(self): super().__init__( status_code=status.HTTP_404_NOT_FOUND, detail={ "code": "FILE_NOT_FOUND", "message": "文件不存在" } ) class InvalidFileTypeException(HTTPException): """无效文件类型异常""" def __init__(self, file_extension: str): super().__init__( status_code=status.HTTP_400_BAD_REQUEST, detail={ "code": "INVALID_FILE_TYPE", "message": f"不支持的文件类型: {file_extension}", "file_extension": file_extension } ) class FileUploadException(HTTPException): """文件上传异常""" def __init__(self, message: str): super().__init__( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail={ "code": "FILE_UPLOAD_FAILED", "message": f"文件上传失败: {message}" } ) class FileDeleteException(HTTPException): """文件删除异常""" def __init__(self, message: str): super().__init__( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail={ "code": "FILE_DELETE_FAILED", "message": f"文件删除失败: {message}" } )