41 lines
1.6 KiB
Python
Executable File
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) |