FastAPI nangani HTML form data (Form) lan file uploads (File/UploadFile) — beda karo JSON bodies, amarga nggunakake content types sing beda (). Loro-lorone dideklarasikake karo tipe parameter khusus.
FastAPI nangani HTML form data (Form) lan file uploads (File/UploadFile) — beda karo JSON bodies, amarga nggunakake content types sing beda (). Loro-lorone dideklarasikake karo tipe parameter khusus.
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}
Gunakake Form() kanggo nampa HTML form fields (kayata login form). Cathetan: route bisa nggunakake JSON body utawa form data, ora loro-lorone, amarga content types beda. (Mbutuhake python-multipart sing wis dipasang.)
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 yaiku tipe sing direkomendasikake — iku file spooled (file gedhe dadi disk, ora kabeh ing memory), karo async methods (read, write, seek) lan metadata. Gunakake iku tinimbang raw bytes kanggo apa wae kajaba file cilik.
@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
Nangani form data lan file uploads yaiku kabutuhan umum, praktis — login forms, profile picture uploads, document submissions, lan file-processing APIs kabeh mbutuhake iku, lan iku tumindak beda karo JSON bodies sing FastAPI gunakake kanthi default.
Ngrumangsani Form() kanggo form fields lan ngetok UploadFile kanggo uploads (pendekatan sing direkomendasikake, amarga iku spools file gedhe dadi disk tinimbang muatake kabeh ing memory — penting kanggo nangani file gedhe tanpa ngabokaake RAM) butuh kasunyatan.
Sama penting yaiku tanggung jawab keamanan sing teka karo uploads: amarga file uploaded yaiku input sing ora dipercaya, ngvalidasi tipe lan ukurane, ngesahne filenames, lan ati-ati carane nyimpen/nayangake iku penting kanggo ngindhari vulnerabilities.
Ngrumangsani carane nampa form fields, nangani single lan multiple file uploads, nggabungake forms karo files, lan validasi uploads kanthi aman yaiku kasunyatan praktis kanggo bangun real-world APIs sing ambruk user-submitted content.