controller.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # -*- coding: utf-8 -*-
  2. from pathlib import Path
  3. from fastapi import APIRouter, BackgroundTasks, Body, Depends, UploadFile, Request
  4. from fastapi.responses import JSONResponse, FileResponse
  5. from app.core.dependencies import AuthPermission
  6. from app.core.logger import log
  7. from app.common.response import SuccessResponse, UploadFileResponse
  8. from app.core.router_class import OperationLogRoute
  9. from app.utils.upload_util import UploadUtil
  10. from .service import FileService
  11. FileRouter = APIRouter(route_class=OperationLogRoute, prefix="/file", tags=["文件管理"])
  12. @FileRouter.post("/upload", summary="上传文件", description="上传文件",dependencies=[Depends(AuthPermission(["module_common:file:upload"]))])
  13. async def upload_controller(
  14. file: UploadFile,
  15. request: Request,
  16. ) -> JSONResponse:
  17. """
  18. 上传文件
  19. 参数:
  20. - file (UploadFile): 上传的文件
  21. - request (Request): 请求对象
  22. 返回:
  23. - JSONResponse: 包含上传文件详情的JSON响应
  24. """
  25. result_dict = await FileService.upload_service(base_url=str(request.base_url), file=file)
  26. log.info(f"上传文件成功 {result_dict}")
  27. return SuccessResponse(data=result_dict, msg="上传文件成功")
  28. @FileRouter.post("/download", summary="下载文件", description="下载文件", dependencies=[Depends(AuthPermission(["module_common:file:download"]))])
  29. async def download_controller(
  30. background_tasks: BackgroundTasks,
  31. file_path: str = Body(..., description="文件路径"),
  32. delete: bool = Body(False, description="是否删除文件"),
  33. ) -> FileResponse:
  34. """
  35. 下载文件
  36. 参数:
  37. - background_tasks (BackgroundTasks): 后台任务对象
  38. - file_path (str): 文件路径
  39. - delete (bool): 是否删除文件
  40. 返回:
  41. - FileResponse: 包含下载文件的响应
  42. """
  43. result = await FileService.download_service(file_path=file_path)
  44. if delete:
  45. background_tasks.add_task(UploadUtil.delete_file, Path(file_path))
  46. log.info(f"下载文件成功")
  47. return UploadFileResponse(file_path=result.file_path, filename=result.file_name)