FastAPI håndterer HTML-formulardata (Form) og filuploadinger (File/UploadFile) — som adskiller sig fra JSON-body, da de bruger forskellige indholdstyper (). Begge erklæres med særlige parametertyper.
FastAPI håndterer HTML-formulardata (Form) og filuploadinger (File/UploadFile) — som adskiller sig fra JSON-body, da de bruger forskellige indholdstyper (). Begge erklæres med særlige parametertyper.
multipart/form-datafrom fastapi import Form
@app.post("/login")
def login(username: str = Form(), password: str = Form()): # form fields, not JSON
# data comes as application/x-www-form-urlencoded or multipart/form-data
return {"username": username}
Brug Form() til at modtage HTML-formularfelter (f.eks. en loginformular). Bemærk: en rute kan bruge enten en JSON-body eller formulardata, ikke begge, da de er forskellige indholdstyper. (Kræver python-multipart installeret.)
from fastapi import File, UploadFile
@app.post("/upload")
async def upload(file: UploadFile): # a single file
contents = await file.read() # read the file's bytes
file.filename # original name
file.content_type # MIME type
# save it:
with open(f"uploads/{file.filename}", "wb") as f:
f.write(contents)
return {"filename": file.filename, "size": len(contents)}
UploadFile er den anbefalede type — det er en spooled-fil (store filer går til disk, ikke alt i hukommelsen), med async-metoder (read, write, seek) og metadata. Brug det i stedet for rå bytes til alt undtagen meget små filer.
@app.post("/upload-many")
async def upload_many(files: list[UploadFile]): # multiple files
return [f.filename for f in files]
@app.post("/profile")
async def profile(name: str = Form(), avatar: UploadFile = File()):
# combine form fields AND a file upload in one multipart request
...
if file.content_type not in ["image/jpeg", "image/png"]: # check type
raise HTTPException(400, "Invalid file type")
# also: limit file SIZE, sanitize filenames, scan content — uploads are untrusted input
Håndtering af formulardata og filuploadinger er et almindeligt, praktisk behov — loginformularer, profilbilleduploadinger, dokumentindsendelser og fil-behandlings-API'er kræver det hele, og det fungerer anderledes end JSON-body, som FastAPI bruger som standard.
Forståelse af Form() for formularfelter og især UploadFile til uploadinger (den anbefalede tilgang, da den spooler store filer til disk snarere end at indlæse alt i hukommelsen — vigtig for at håndtere store filer uden at opbruge RAM) er nødvendig for disse funktioner.
Ligeledes vigtig er sikkerhedsansvaret, der følger med uploadinger: da uploadede filer er usikker input, validering af deres type og størrelse, sanitering af filnavne og omhu ved, hvordan du gemmer/serverer dem, er vigtig for at undgå sårbarheder.
At vide, hvordan man modtager formularfelter, håndterer enkelt og flere filuploadinger, kombinerer formularer med filer og validerer uploadinger sikkert, er praktisk viden for at bygge API'er i den virkelige verden, der accepterer brugerindsendelser.