| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- # -*- coding: utf-8 -*-
- from typing import Dict
- from fastapi import UploadFile
- from app.core.exceptions import CustomException
- from app.core.base_schema import UploadResponseSchema, DownloadFileSchema
- from app.utils.upload_util import UploadUtil
- class FileService:
- """
- 文件管理服务层
- """
- @classmethod
- async def upload_service(cls, base_url: str, file: UploadFile, upload_type: str = 'local') -> Dict:
- """
- 上传文件。
-
- 参数:
- - base_url (str): 基础访问 URL。
- - file (UploadFile): 上传文件对象。
- - upload_type (str): 上传类型,'local' 或 'oss',默认 'local'。
-
- 返回:
- - Dict: 上传响应字典。
-
- 异常:
- - CustomException: 当未选择文件或上传类型错误时抛出。
- """
- if not file:
- raise CustomException(msg="请选择要上传的文件")
- if upload_type == 'local':
- filename, filepath, file_url = await UploadUtil.upload_file(file=file, base_url=base_url)
- else:
- raise CustomException(msg="上传类型错误")
-
- return UploadResponseSchema(
- file_path=f'{filepath}',
- file_name=filename,
- origin_name=file.filename,
- file_url=f'{file_url}',
- ).model_dump()
-
- @classmethod
- async def download_service(cls, file_path: str) -> DownloadFileSchema:
- """
- 下载文件。
-
- 参数:
- - file_path (str): 文件路径。
-
- 返回:
- - DownloadFileSchema: 下载文件响应对象。
-
- 异常:
- - CustomException: 当未选择文件或文件不存在时抛出。
- """
- if not file_path:
- raise CustomException(msg="请选择要下载的文件")
- if not UploadUtil.check_file_exists(file_path):
- raise CustomException(msg="文件不存在")
- file_name = UploadUtil.download_file(file_path)
- return DownloadFileSchema(
- file_path=file_path,
- file_name=str(file_name),
- )
|