fastapi:文件上传,带schema
一,安装第三方库
% pip install python-multipart
二,代码
schema:
from fastapi import UploadFile
from pydantic import BaseModel, Field
class AssetUploadRequest(BaseModel):
file: UploadFile = Field(..., description="要上传的图片文件")
# 直接使用 examples=[...],更符合直觉
file_type: int = Field(..., description="文件类型", examples=[1])
name: str = Field(..., description="图片名称", examples=["我的自画像"])
接口:
from datetime import UTC, datetime
from fastapi import APIRouter, Depends, UploadFile, File
from app.core.response import success
from loguru import logger
from app.core.setting import get_settings
import os
import shutil
from typing import Annotated
from app.schemas.asset_schema import AssetUploadRequest
from fastapi import Form
router = APIRouter(prefix="/asset",tags=["前台-首页"])
@router.post("/upload", summary="文件上传")
# file: UploadFile = File(...)
# 使用 Form() 告诉 FastAPI 这是一个表单模型依赖
async def upload(form_data: Annotated[AssetUploadRequest, Form()]) -> dict:
# 接收参数
file = form_data.file
file_type = form_data.file_type
name = form_data.name
print("name: ", name)
print("file_type: ", file_type)
# 得到配置
setting = get_settings()
# 拼接本地保存路径
upload_dir = setting.file_local_dir
file_path = os.path.join(upload_dir, file.filename)
# 打开本地文件并将上传的文件内容复制进去
with open(file_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
url = setting.file_host+"/"+file.filename
return {
"message": "文件上传成功",
"filename": file.filename,
"saved_path": file_path,
"url": url,
}
三,测试效果:

浙公网安备 33010602011771号