FastAPI HTML form data (Form) और file uploads (File/UploadFile) को संभालता है — जो JSON bodies से अलग हैं, क्योंकि वे अलग content types () का उपयोग करते हैं। दोनों को special parameter types के साथ घोषित किया जाता है।
FastAPI HTML form data (Form) और file uploads (File/UploadFile) को संभालता है — जो JSON bodies से अलग हैं, क्योंकि वे अलग content types () का उपयोग करते हैं। दोनों को special parameter types के साथ घोषित किया जाता है।
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 fields प्राप्त करने के लिए Form() का उपयोग करें (जैसे एक login form)। ध्यान दें: एक route या तो JSON body या form data का उपयोग कर सकता है, दोनों नहीं, क्योंकि वे अलग content types हैं। (python-multipart का installed होना आवश्यक है।)
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 अनुशंसित type है — यह एक spooled file है (बड़ी files disk पर जाती हैं, सब कुछ memory में नहीं), async methods (read, write, seek) और metadata के साथ। छोटी files को छोड़कर बाकी सब के लिए इसे raw 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
form data और file uploads को संभालना एक सामान्य, व्यावहारिक आवश्यकता है — login forms, profile picture uploads, document submissions और file-processing APIs सभी को इसकी आवश्यकता होती है, और यह उन JSON bodies से अलग तरीके से काम करता है जिनका FastAPI डिफ़ॉल्ट रूप से उपयोग करता है।
form fields के लिए Form() और विशेष रूप से uploads के लिए UploadFile को समझना (अनुशंसित दृष्टिकोण, क्योंकि यह बड़ी files को सब कुछ memory में load करने के बजाय disk पर spool करता है — बड़ी files को RAM समाप्त किए बिना संभालने के लिए महत्वपूर्ण) इन features के लिए आवश्यक है।
इतना ही महत्वपूर्ण वह security जिम्मेदारी है जो uploads के साथ आती है: चूंकि uploaded files untrusted input हैं, उनके type और size को validate करना, filenames को sanitize करना, और उन्हें कैसे store/serve करते हैं इस बारे में सावधान रहना vulnerabilities से बचने के लिए आवश्यक है।
यह जानना कि form fields कैसे प्राप्त करें, single और multiple file uploads कैसे संभालें, forms को files के साथ कैसे जोड़ें, और uploads को सुरक्षित रूप से कैसे validate करें, उपयोगकर्ता-प्रस्तुत सामग्री स्वीकार करने वाली वास्तविक APIs बनाने के लिए व्यावहारिक ज्ञान है।