file_browse.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from fastapi import APIRouter, Depends, HTTPException, status
  2. from pathlib import Path
  3. from datetime import datetime
  4. from utils.response import resp_200
  5. from config.site import FILE_STORAGE_PATH
  6. # 路由
  7. router = APIRouter()
  8. def get_file_info(file_path: Path):
  9. """获取文件信息"""
  10. info = file_path.stat()
  11. return {
  12. "name": file_path.name,
  13. "size": info.st_size,
  14. "created_at": datetime.fromtimestamp(info.st_ctime).isoformat(),
  15. "modified_at": datetime.fromtimestamp(info.st_mtime).isoformat(),
  16. "is_directory": file_path.is_dir()
  17. }
  18. @router.get("/api/browse/{path:path}")
  19. async def browse_directory(path: str):
  20. prefix = FILE_STORAGE_PATH + "/"
  21. p = Path(prefix+path.replace("|","\\"))
  22. if not p.exists():
  23. raise HTTPException(status_code=404, detail="Directory not found")
  24. if not p.is_dir():
  25. raise HTTPException(status_code=400, detail="Path is not a directory")
  26. files_and_dirs = [get_file_info(f) for f in p.iterdir()]
  27. return resp_200(data= files_and_dirs)
  28. file_browse_router = router