FastAPI ले HTML फारम डेटा (Form) र फाइल अपलोडहरू (File/UploadFile) सँग काम गर्छ — JSON bodies भन्दा अलग, किनकि तिनीहरूले फरक सामग्री प्रकारहरू () प्रयोग गर्छन्। दुवै विशेष प्यारामीटर प्रकारहरूसँग घोषणा गरिन्छन्।
FastAPI ले HTML फारम डेटा (Form) र फाइल अपलोडहरू (File/UploadFile) सँग काम गर्छ — JSON bodies भन्दा अलग, किनकि तिनीहरूले फरक सामग्री प्रकारहरू () प्रयोग गर्छन्। दुवै विशेष प्यारामीटर प्रकारहरूसँग घोषणा गरिन्छन्।
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 body वा फारम डेटा प्रयोग गर्न सक्छ, दुवै नभई, किनकि तिनीहरू फरक सामग्री प्रकारहरू हुन्। (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
फारम डेटा र फाइल अपलोडहरू हेर्नु एक साधारण, व्यावहारिक आवश्यकता हो — लगइन फारमहरू, प्रोफाइल चित्र अपलोडहरू, कागजपत्र सबमिशनहरू, र फाइल-प्रसंस्करण APIs सबै यसको आवश्यकता पर्दछ, र यो FastAPI ले पूर्वनिर्धारितमा प्रयोग गर्ने JSON bodies भन्दा फरक तरिकामा काम गर्छ।
Form() फारम फिल्डहरूको लागि र विशेष गरी UploadFile अपलोडहरूको लागि (अनुशंसित दृष्टिकोण, किनकि यो ठूला फाइलहरूलाई डिस्कमा spooling गर्छ सबै कुरा मेमोरीमा लोड गर्नुको सट्टामा — बिना RAM समाप्त गरी ठूला फाइलहरू सँभाल्नको लागि महत्त्वपूर्ण) बुझ्न आवश्यक छ।
समान महत्त्वपूर्ण अपलोडहरूसँग आउने सुरक्षा जिम्मेवारी हो: अपलोड गरिएका फाइलहरू विश्वस्त नहोएको इनपुट भएकोले, तिनीहरूको प्रकार र आकार मान्यता दिनु, फाइलनामहरू सफा गर्नु, र तिनीहरूलाई कसरी भण्डार गर्न/सेवा गर्न सावधान हुनु असुरक्षितताहरू बेवास्ता गर्न आवश्यक छ।
फारम फिल्डहरू कसरी प्राप्त गर्ने, एकल र बहुविध फाइल अपलोडहरू कसरी सँभाल्ने, फारमहरूलाई फाइलहरूसँग संयोजन गर्ने, र अपलोडहरूलाई सुरक्षित तरिकामा मान्यता दिने कसरी गर्ने भन्ने ज्ञान उपयोगकर्ता-सबमिट गरिएको सामग्री स्वीकार गर्ने वास्तविक-विश्व APIs निर्माण गर्नको लागि व्यावहारिक ज्ञान हो।