FastAPI HTML फॉर्म डेटा (Form) आणि फाइल अपलोड (File/UploadFile) हाताळते — JSON बॉडीपेक्षा वेगळे, कारण ते विविध कंटेंट प्रकार () वापरतात. दोन्ही विशेष पॅरामीटर प्रकारांसह घोषित केले जातात.
FastAPI HTML फॉर्म डेटा (Form) आणि फाइल अपलोड (File/UploadFile) हाताळते — JSON बॉडीपेक्षा वेगळे, कारण ते विविध कंटेंट प्रकार () वापरतात. दोन्ही विशेष पॅरामीटर प्रकारांसह घोषित केले जातात.
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}
HTML फॉर्म फील्ड प्राप्त करण्यासाठी Form() वापरा (उदा. लॉगिन फॉर्म). नोट: एक रूट एकतर JSON बॉडी किंवा फॉर्म डेटा वापरू शकते, दोन्ही नाही, कारण ते वेगवेगळे कंटेंट प्रकार आहेत. (python-multipart स्थापित आवश्यक आहे.)
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 हा शिफारसीचा प्रकार आहे — हा एक spooled फाइल आहे (मोठ्या फाइली डिस्कवर जातात, संपूर्ण मेमोरीमध्ये नाही), async पद्धती (read, write, seek) आणि मेटाडेटा सह. लहान फाइली सोडून इतर सर्व गोष्टीसाठी कच्च्या bytes पेक्षा याचा वापर करा.
@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
फॉर्म डेटा आणि फाइल अपलोड हाताळणे हा एक सामान्य, व्यावहारिक गरज आहे — लॉगिन फॉर्म, प्रोफाइल चित्र अपलोड, दस्तऐवज सबमिशन आणि फाइल-प्रोसेसिंग API सर्वांना आवश्यक आहे, आणि हे FastAPI डिफॉल्टरित्या वापरणार्या JSON बॉडीपेक्षा वेगळ्या प्रकारे कार्य करते.
Form() फॉर्म फील्डसाठी आणि विशेषतः UploadFile अपलोडसाठी (शिफारसीचा दृष्टिकोन, कारण हे मोठ्या फाइली डिस्कवर spools करते संपूर्ण मेमोरीमध्ये लोड करण्याऐवजी — मोठ्या फाइली हाताळताना RAM संपून जाण्यापासून रक्षण करण्यासाठी महत्वाचे) समजून घेणे या वैशिष्ट्यांसाठी आवश्यक आहे.
समान महत्वाचे म्हणजे अपलोड्सचे सुरक्षा जबाबदारी: अपलोड केलेल्या फाइली विश्वसनीय नसलेली इनपुट असल्याने, त्यांचा प्रकार आणि आकार सत्यापित करणे, फाइलनाव साफ करणे आणि ते कसे संचयित/सेवा दिता हे सावधानीपूर्वक करणे असुरक्षितता टाळण्यासाठी आवश्यक आहे.
फॉर्म फील्ड कसे प्राप्त करायचे, एकल आणि एकाधिक फाइल अपलोड हाताळायचे, फॉर्म्स फाइली सह एकत्रित करायचे आणि अपलोड्स सुरक्षितपणे सत्यापित करायचे हे जाणून घेणे हे वापरकर्ता-सबमिट केलेल्या सामग्री स्वीकारणारे वास्तविक API तयार करण्यासाठी व्यावहारिक ज्ञान आहे.