You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FastAPI中同时请求FormData与图片?附报错及代码

解决FastAPI同时接收表单数据与图片的接口错误

问题原因

当接口同时包含UploadFile(文件)和Pydantic模型参数时,FastAPI会将请求内容类型设为multipart/form-data,但Pydantic模型默认仅支持解析JSON格式数据,无法直接从表单字段中解析,因此会触发422验证错误。

解决方案

需要将Pydantic模型的字段通过Form依赖项接收,再转换为模型实例。以下是两种可行的修改方式:

方式1:逐个字段用Form接收并组装模型

from fastapi import FastAPI, File, UploadFile, Form
from pydantic import BaseModel

app = FastAPI()

class UserModel(BaseModel):
    username: str
    password: str
    firstname: str
    lastname: str

@app.post('/register') 
async def register_kamwali(
    username: str = Form(...),
    password: str = Form(...),
    firstname: str = Form(...),
    lastname: str = Form(...),
    image: UploadFile = File(...)
):
    print(image.filename)
    user = UserModel(username=username, password=password, firstname=firstname, lastname=lastname)
    data = {"password": user.password, "firstname": user.firstname, "lastname": user.lastname} 
    db.child("Users").child(user.username).set(data); 
    db.push(data) 
    return {"user added successfully !!"} 

方式2:自定义依赖函数转换表单字段为模型

from fastapi import FastAPI, File, UploadFile, Form, Depends
from pydantic import BaseModel

app = FastAPI()

class UserModel(BaseModel):
    username: str
    password: str
    firstname: str
    lastname: str

async def get_user_from_form(
    username: str = Form(...),
    password: str = Form(...),
    firstname: str = Form(...),
    lastname: str = Form(...)
) -> UserModel:
    return UserModel(username=username, password=password, firstname=firstname, lastname=lastname)

@app.post('/register') 
async def register_kamwali(
    user: UserModel = Depends(get_user_from_form),
    image: UploadFile = File(...)
):
    print(image.filename)
    data = {"password": user.password, "firstname": user.firstname, "lastname": user.lastname} 
    db.child("Users").child(user.username).set(data); 
    db.push(data) 
    return {"user added successfully !!"} 

说明

两种方式的核心逻辑一致:通过Form依赖项获取表单字段,再转换为UserModel实例,让FastAPI能正确解析multipart/form-data类型请求,同时处理文件与表单数据。

内容的提问来源于stack exchange,提问作者Abhay Chaudhari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:35:25