Update
Please have a look at this answer for more options on how to upload a File
together with JSON
data.
Original answer
In short, you can't have Pydantic models (JSON
data) defined together with Form
(and/or File
) data. You can either use Form
fields, i.e, sending the data as form-data
in the body:
@router.post("/")
def create_banner(title: str = Form(...), text: str = Form(...), photo: UploadFile = File(...)):
return {"JSON Payload ": {"title": title, "text": text}, "Uploaded Filename": photo.filename}
or, use Dependencies with Pydantic models, i.e., sending the data as query
parameters:
from pydantic import BaseModel
from fastapi import Depends
class Banner(BaseModel):
title: str
text: str
@router.post("/")
def create_banner(banner: Banner = Depends(), photo: UploadFile = File(...)):
return {"JSON Payload ": banner.dict(), "Uploaded Filename": photo.filename}