FastAPI ফর্ম ডেটা (Form) এবং ফাইল আপলোড (File/UploadFile) পরিচালনা করে — এটি JSON বডি থেকে আলাদা, কারণ তারা বিভিন্ন কন্টেন্ট টাইপ ব্যবহার করে ()। উভয়ই বিশেষ প্যারামিটার টাইপের সাথে ঘোষণা করা হয়।
FastAPI ফর্ম ডেটা (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) এবং মেটাডেটা। অত্যন্ত ছোট ফাইলগুলি ছাড়া অন্য সবকিছুর জন্য 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
ফর্ম ডেটা এবং ফাইল আপলোড পরিচালনা একটি সাধারণ, ব্যবহারিক প্রয়োজন — লগইন ফর্ম, প্রোফাইল ছবি আপলোড, ডকুমেন্ট জমা দেওয়া এবং ফাইল-প্রসেসিং API সব এটির প্রয়োজন, এবং এটি FastAPI যে JSON বডি ডিফল্টভাবে ব্যবহার করে তার থেকে আলাদাভাবে কাজ করে।
ফর্ম ফিল্ডের জন্য Form() এবং বিশেষত আপলোডের জন্য UploadFile বোঝা (সুপারিশকৃত পদ্ধতি, কারণ এটি বড় ফাইলগুলি ডিস্কে spool করে বরং সবকিছু মেমরিতে লোড করার পরিবর্তে — বড় ফাইলগুলি পরিচালনা করার জন্য গুরুত্বপূর্ণ RAM বিনষ্ট না করে) এই বৈশিষ্ট্যগুলির জন্য প্রয়োজনীয়।
সমানভাবে গুরুত্বপূর্ণ হল নিরাপত্তার দায়বদ্ধতা যা আপলোডের সাথে আসে: যেহেতু আপলোড করা ফাইলগুলি অবিশ্বস্ত ইনপুট, তাদের ধরন এবং আকার যাচাই করা, ফাইলনাম পরিশোধন করা এবং আপনি সেগুলি কীভাবে সংরক্ষণ/পরিবেশন করেন সে সম্পর্কে সাবধান থাকা দুর্বলতা এড়াতে অপরিহার্য।
ফর্ম ফিল্ড গ্রহণ করতে, একক এবং একাধিক ফাইল আপলোড পরিচালনা করতে, ফর্মগুলি ফাইলগুলির সাথে একত্রিত করতে এবং আপলোডগুলি নিরাপদে যাচাই করতে কীভাবে জানা হল বাস্তব-বিশ্বের API তৈরি করার জন্য ব্যবহারিক জ্ঞান যা ব্যবহারকারী-জমা দেওয়া সামগ্রী গ্রহণ করে।