FastAPI HTML فارم ڈیٹا (Form) اور فائل اپ لوڈز (File/UploadFile) کو سنبھالتا ہے — یہ JSON bodies سے الگ ہیں، کیونکہ وہ مختلف content types () استعمال کرتے ہیں۔ دونوں خصوصی parameter types کے ساتھ declare کیے جاتے ہیں۔
FastAPI HTML فارم ڈیٹا (Form) اور فائل اپ لوڈز (File/UploadFile) کو سنبھالتا ہے — یہ JSON bodies سے الگ ہیں، کیونکہ وہ مختلف content types () استعمال کرتے ہیں۔ دونوں خصوصی parameter types کے ساتھ declare کیے جاتے ہیں۔
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() استعمال کریں (مثال کے طور پر ایک login فارم)۔ نوٹ: ایک route میں JSON body یا فارم ڈیٹا استعمال ہو سکتا ہے، دونوں نہیں، کیونکہ وہ مختلف content types ہیں۔ (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 file ہے (بڑی فائلیں disk پر جاتی ہیں، سب memory میں نہیں)، async methods (read, write, seek) اور metadata کے ساتھ۔ چھوٹی فائلوں کے علاوہ کسی اور چیز کے لیے 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
فارم ڈیٹا اور فائل اپ لوڈز کو سنبھالنا ایک عام، عملی ضرورت ہے — login فارمز، پروفائل تصویر اپ لوڈز، دستاویز کی جمع، اور فائل-پروسیسنگ APIs سب کو اس کی ضرورت ہے، اور یہ FastAPI کی طرف سے JSON bodies سے مختلف طریقے سے کام کرتا ہے۔
فارم فیلڈز کے لیے Form() اور خاص طور پر اپ لوڈز کے لیے UploadFile کو سمجھنا ضروری ہے (سفارش شدہ طریقہ، کیونکہ یہ بڑی فائلوں کو disk پر spools کرتا ہے بجائے سب کو memory میں لوڈ کرنے کے — بڑی فائلوں کو سنبھالنے کے لیے اہم ہے RAM کو ختم کیے بغیر)۔
اتنا ہی اہم سیکیورٹی کی ذمہ داری ہے جو اپ لوڈز کے ساتھ آتی ہے: چونکہ اپ لوڈ شدہ فائلیں untrusted input ہیں، ان کی قسم اور سائز کو validate کرنا، filenames کو sanitize کرنا، اور احتیاط سے انہیں store/serve کرنا کمزوریوں سے بچنے کے لیے ضروری ہے۔
فارم فیلڈز وصول کرنا، single اور متعدد فائل اپ لوڈز کو سنبھالنا، فارمز کو فائلوں کے ساتھ ملانا، اور اپ لوڈز کو محفوظ طریقے سے validate کرنا جاننا حقیقی دنیا کے APIs بنانے کے لیے عملی علم ہے جو صارف کے جمع کرائے ہوئے مواد کو قبول کرتے ہیں۔