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,
    }

三,测试效果:

image

posted @ 2026-10-05 23:29  刘宏缔的架构森林  阅读(3)  评论(0)    收藏  举报