Files
backend/backend/app/admin/api/v1/file.py
2025-10-18 10:54:08 +08:00

41 lines
1.6 KiB
Python
Executable File

from fastapi import APIRouter, UploadFile, File, Query, Depends, Response
from backend.app.admin.schema.file import FileUploadResponse
from backend.app.admin.service.file_service import file_service
from backend.common.response.response_schema import response_base, ResponseSchemaModel
from backend.common.security.jwt import DependsJwtAuth
router = APIRouter()
@router.post("/upload", summary="上传文件", dependencies=[DependsJwtAuth])
async def upload_file(
file: UploadFile = File(...),
) -> ResponseSchemaModel[FileUploadResponse]:
"""上传文件"""
result = await file_service.upload_file(file)
return response_base.success(data=result)
@router.get("/{file_id}", summary="下载文件", dependencies=[DependsJwtAuth])
# @router.get("/{file_id}", summary="下载文件")
async def download_file(file_id: int) -> Response:
"""下载文件"""
try:
content, filename, content_type = await file_service.download_file(file_id)
headers = {
"Content-Disposition": f'attachment; filename="{filename}"',
"Content-Type": content_type
}
return Response(content=content, headers=headers)
except Exception as e:
return Response(content=str(e), status_code=404)
@router.delete("/{file_id}", summary="删除文件", dependencies=[DependsJwtAuth])
async def delete_file(file_id: int) -> ResponseSchemaModel[bool]:
"""删除文件"""
result = await file_service.delete_file(file_id)
if not result:
return await response_base.fail(message="文件不存在或删除失败")
return await response_base.success(data=result)