FastAPI hushughulikia data ya fomu ya HTML (Form) na upakiaji wa faili (File/UploadFile) — vinavyotofautiana na miili ya JSON, kwa kuwa hutumia aina tofauti za maudhui (). Vyote viwili hutangazwa kwa aina maalum za parameta.
FastAPI hushughulikia data ya fomu ya HTML (Form) na upakiaji wa faili (File/UploadFile) — vinavyotofautiana na miili ya JSON, kwa kuwa hutumia aina tofauti za maudhui (). Vyote viwili hutangazwa kwa aina maalum za parameta.
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}
Tumia Form() kupokea sehemu za fomu ya HTML (k.m. fomu ya kuingia). Kumbuka: route inaweza kutumia mwili wa JSON au data ya fomu, si vyote viwili, kwa kuwa ni aina tofauti za maudhui. (Inahitaji python-multipart kuwa imewekwa.)
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 ndiyo aina inayopendekezwa — ni faili la spooled (faili kubwa huenda kwenye diski, si yote kwenye kumbukumbu), lenye methods za async (read, write, seek) na metadata. Itumie badala ya bytes ghafi kwa chochote isipokuwa faili ndogo sana.
@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
Kushughulikia data ya fomu na upakiaji wa faili ni hitaji la kawaida na la vitendo — fomu za kuingia, upakiaji wa picha za wasifu, uwasilishaji wa nyaraka, na API za uchakataji wa faili zote huihitaji, nayo hufanya kazi tofauti na miili ya JSON ambayo FastAPI hutumia kwa chaguo-msingi.
Kuelewa Form() kwa sehemu za fomu na hasa UploadFile kwa upakiaji (mbinu inayopendekezwa, kwa kuwa huweka faili kubwa kwenye diski badala ya kupakia kila kitu kwenye kumbukumbu — muhimu kwa kushughulikia faili kubwa bila kumaliza RAM) ni la lazima kwa vipengele hivi.
La muhimu sawa ni wajibu wa usalama unaokuja na upakiaji: kwa kuwa faili zilizopakiwa ni ingizo lisilo la kuaminika, kuthibitisha aina na ukubwa wake, kusafisha majina ya faili, na kuwa makini jinsi unavyozihifadhi/kuzihudumia ni jambo la lazima ili kuepuka udhaifu.
Kujua jinsi ya kupokea sehemu za fomu, kushughulikia upakiaji wa faili moja na nyingi, kuchanganya fomu na faili, na kuthibitisha upakiaji kwa usalama ni maarifa ya vitendo ya kujenga API za ulimwengu halisi zinazokubali maudhui yaliyowasilishwa na mtumiaji.