42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
from __future__ import annotations
|
||
|
||
from fastapi import APIRouter, Depends, File, Form, UploadFile
|
||
from sqlalchemy.ext.asyncio import AsyncSession
|
||
|
||
from app.dependencies import get_admin_user, get_db
|
||
from app.enums.admin_upload import AdminUploadResourceTypeEnum, AdminUploadSceneEnum
|
||
from app.models.user import User
|
||
from app.schemas.admin_upload import AdminUploadFileOut
|
||
from app.services.admin_upload import admin_upload_service
|
||
|
||
router = APIRouter(prefix="/admin/uploads", tags=["admin-upload"])
|
||
|
||
|
||
@router.post(
|
||
"/files",
|
||
response_model=AdminUploadFileOut,
|
||
summary="管理后台全局文件上传",
|
||
description=(
|
||
"管理后台纯文件上传统一入口。通过 scene 区分业务场景并落到独立目录;"
|
||
"首页素材附件使用 scene=home_material_reference,系统Logo使用 system_logo,PDF使用 system_pdf,开户缩略图使用 open_type_thumb。"
|
||
),
|
||
)
|
||
async def upload_admin_file(
|
||
file: UploadFile = File(..., description="上传文件。"),
|
||
scene: AdminUploadSceneEnum = Form(..., description="上传场景。"),
|
||
resource_type: AdminUploadResourceTypeEnum = Form(..., description="资源类型:image/video/audio/pdf/file。"),
|
||
duration_seconds: float | None = Form(None, ge=0, description="音视频时长,单位秒。"),
|
||
admin: User = Depends(get_admin_user),
|
||
db: AsyncSession = Depends(get_db),
|
||
):
|
||
result = await admin_upload_service.upload_file(
|
||
db,
|
||
file=file,
|
||
scene=scene,
|
||
resource_type=resource_type,
|
||
duration_seconds=duration_seconds,
|
||
admin=admin,
|
||
)
|
||
await db.commit()
|
||
return result
|