FastAPI HTML ફોર્મ ડેટા (Form) અને ફાઇલ અપલોડ્સ (File/UploadFile) સંભાળે છે — JSON બોડીથી અલગ, કારણ કે તેઓ વિવિધ કન્ટેન્ટ પ્રકારો () ઉપયોગ કરે છે. બંને વિશેષ પરિમાણ પ્રકારો સાથે ઘોષણા કરવામાં આવે છે.
FastAPI HTML ફોર્મ ડેટા (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 એ ભલામણ કરેલ પ્રકાર છે — તે સ્પુલ કરેલ ફાઇલ છે (મોટી ફાઇલો ડિસ્ક પર જાય છે, મેમરીમાં બધી નહીં), 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
ફોર્મ ડેટા અને ફાઇલ અપલોડ્સ સંભાળવું એક સામાન્ય, વ્યવહારિક જરૂર છે — લોગિન ફોર્મ્સ, પ્રોફાઇલ ચિત્ર અપલોડ્સ, દસ્તાવેજ સબમિશનો, અને ફાઇલ-પ્રોસેસિંગ API બધા તેની જરૂર છે, અને તે FastAPI ડીફોલ્ટ રીતે ઉપયોગ કરે છે તે JSON બોડીથી અલગ કામ કરે છે.
ફોર્મ ફીલ્ડ્સ માટે Form() અને ખાસ કરીને અપલોડ્સ માટે UploadFile (ભલામણ કરેલ અભિગમ, કારણ કે તે મોટી ફાઇલોને ડિસ્ક પર સ્પુલ કરે છે બદલે બધું મેમરીમાં લોડ કરવાના — મોટી ફાઇલો સંભાળવા માટે મહત્વપૂર્ણ RAM ખતમ કર્યા વગર) સમજવું જરૂરી છે આ ફીચર્સ માટે.
સમાન મહત્વપૂર્ણ એ સુરક્ષા જવાબદારી છે જે અપલોડ્સ સાથે આવે છે: અપલોડ કરેલ ફાઇલો અવિશ્વસત ઇનપુટ હોવાથી, તેમના પ્રકાર અને કદ માંજવું, ફાઇલનામો શુદ્ધ કરવા, અને તમે તેમને કેવી રીતે સંગ્રહ કરો/પરિવેશન કરો તેની સાવચેતી રાખવી આવશ્યક છે જેથી નુકસાન ટાળી શકાય.
ફોર્મ ફીલ્ડ્સ કેવી રીતે પ્રાપ્ત કરવી, એક અને બહુવિધ ફાઇલ અપલોડ્સ સંભાળવી, ફોર્મ્સ સાથે ફાઇલો જોડવી, અને અપલોડ્સ સુરક્ષિત રીતે માંજવું તે જાણવું વ્યવહારિક જ્ઞાન છે વાસ્તવિક-વિશ્વ API બનાવવા માટે જે ઉપયોગકર્તા-સબમિટ કરેલ કન્ટેન્ટ સ્વીકારે છે.