FastAPI HTML ఫారమ్ డేటా (Form) మరియు ఫైల్ అప్లోడ్లు (File/UploadFile) నిర్వహిస్తుంది — ఇవి JSON బాడీ నుండి భిన్నమైనవి, ఎందుకంటే అవి వేర్వేరు content types () ఉపయోగిస్తాయి. రెండూ ప్రత్యేక పారామీటర్ రకాలతో ప్రకటించబడతాయి.
FastAPI HTML ఫారమ్ డేటా (Form) మరియు ఫైల్ అప్లోడ్లు (File/UploadFile) నిర్వహిస్తుంది — ఇవి JSON బాడీ నుండి భిన్నమైనవి, ఎందుకంటే అవి వేర్వేరు content 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() ఉపయోగించండి (ఉదా. లాగిన్ ఫారమ్). గమనిక: ఒక రూట్ JSON బాడీ లేదా ఫారమ్ డేటాను ఉపయోగించగలదు, రెండూ కాదు, ఎందుకంటే అవి వేర్వేరు 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 ఫైల్ (పెద్ద ఫైల్లు డిస్క్కు వెళ్తాయి, మెమరీలో అన్నీ కాదు), 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
ఫారమ్ డేటా మరియు ఫైల్ అప్లోడ్లను నిర్వహించడం సాధారణ, ఆచరణాత్మక అవసరం — లాగిన్ ఫారమ్లు, ప్రొఫైల్ చిత్ర అప్లోడ్లు, డాక్యుమెంట్ సమర్పణలు మరియు ఫైల్-ప్రాసెసింగ్ APIs అన్నీ దీనిని అవసరం చేసుకుంటాయి, మరియు FastAPI డిఫాల్ట్గా ఉపయోగించే JSON బాడీ నుండి ఇది భిన్నంగా పనిచేస్తుంది.
ఫారమ్ ఫీల్డ్ల కోసం Form() మరియు ముఖ్యంగా అప్లోడ్ల కోసం UploadFile (సిఫారసు చేయబడిన విధానం, ఎందుకంటే ఇది పెద్ద ఫైల్లను డిస్క్కు spools చేస్తుంది, మెమరీలో అన్నీ లోడ్ చేయడానికి బదులుగా — RAM ను అయిపోకుండా పెద్ద ఫైల్లను నిర్వహించడానికి ముఖ్యమైనది) ని అర్థం చేసుకోవడం ఈ ఫీచర్ల కోసం అవసరం.
సమానంగా ముఖ్యమైనది అప్లోడ్ల తో వచ్చే నిరాపత్త బాధ్యత: అప్లోడ్ చేయబడిన ఫైల్లు విశ్వాసం లేని ఇన్పుట్ కాబట్టి, వాటి రకం మరియు పరిమాణాన్ని ధృవీకరించడం, ఫైల్ పేర్లను శుద్ధి చేయడం మరియు వాటిని ఎలా నిల్వ చేస్తారు/అందించాలో జాగ్రత్తగా ఉండటం దుర్బలతలను నివారించడానికి ఆవశ్యకమైనది.
ఫారమ్ ఫీల్డ్లను స్వీకరించడం, ఒకే మరియు బహుళ ఫైల్ అప్లోడ్లను నిర్వహించడం, ఫారమ్లను ఫైల్లతో సంయోజించడం మరియు అప్లోడ్లను సురక్షితంగా ధృవీకరించడం ఎలాగో తెలుసుకోవడం వాడుకరి-సమర్పిత కంటెంట్ను స్వీకరించే వాస్తవ-ప్రపంచ APIలను నిర్మించడానికి ఆచరణాత్మక జ్ఞానం.