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) ਅਤੇ metadata ਦੇ ਨਾਲ। ਬਹੁਤ ਛੋਟੀਆਂ ਫਾਈਲਾਂ ਤੋਂ ਬਾਅਦ ਕਿਸੇ ਵੀ ਚੀਜ਼ ਲਈ 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 ਬਾਡੀ ਦੀ ਤੁਲਨਾ ਵਿੱਚ ਵਿਭਿੰਨ ਤਰੀਕੇ ਨਾਲ ਕਾਮ ਕਰਦਾ ਹੈ।
orm ਫੀਲਡ ਲਈ Form() ਨੂੰ ਸਮਝਣਾ ਅਤੇ ਖਾਸ ਕਰਕੇ ਅਪਲੋਡ ਲਈ UploadFile (ਸਿਫਾਰਿਸ਼ ਕੀਤਾ ਢੰਗ, ਕਿਉਂਕਿ ਇਹ ਵੱਡੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਡਿਸਕ 'ਤੇ ਸਿੱਖਦਾ ਹੈ ਨਾ ਕਿ ਸਭ ਕੁਝ ਮੈਮੋਰੀ ਵਿੱਚ ਲੋਡ ਕਰਦਾ ਹੈ — ਵੱਡੀਆਂ ਫਾਈਲਾਂ ਨੂੰ RAM ਨੂੰ ਖਤਮ ਕੀਤੇ ਬਿਨਾਂ ਸੰਭਾਲਣ ਲਈ ਮਹੱਤਵਪੂਰਣ) ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਲਈ ਜ਼ਰੂਰੀ ਹੈ।
ਸਮਾਨ ਰੂਪ ਤੋਂ ਮਹੱਤਵਪੂਰਣ ਅਪਲੋਡ ਦੇ ਨਾਲ ਆਉਣਦੀ ਸੁਰੱਖਿਆ ਜ਼ਿੰਮੇਵਾਰੀ ਹੈ: ਕਿਉਂਕਿ ਅਪਲੋਡ ਕੀ ਗਈ ਫਾਈਲਾਂ ਅਵਿਸ਼ਵਾਸ ਕਰਨ ਲਾਇਕ ਇਨਪੁਟ ਹੁੰਦੀਆਂ ਹਨ, ਉਨ੍ਹਾਂ ਦੀ ਕਿਸਮ ਅਤੇ ਸਾਈਜ਼ ਦੀ ਪ੍ਰਮਾਣਿਕਤਾ ਚੈਕ ਕਰਨਾ, ਫਾਈਲ ਦੇ ਨਾਮ ਸਾਫ ਕਰਨੇ, ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਕਿਵੇਂ ਸਟੋਰ/ਪਰੋਸ ਕਰਨਾ ਹੈ ਸਮੱਸਿਆ ਬਾਰੇ ਸਾਵਧਾਨੀ ਕਮਜ਼ੋਰੀਆਂ ਤੋਂ ਬਚਣ ਲਈ ਮਹੱਤਵਪੂਰਣ ਹੈ।
ਫਾਰਮ ਫੀਲਡ ਪ੍ਰਾਪਤ ਕਰਨਾ, ਸਿੰਗਲ ਅਤੇ ਮਲਟੀਪਲ ਫਾਈਲ ਅਪਲੋਡ ਨੂੰ ਸੰਭਾਲਣਾ, ਫਾਰਮ ਨਾਲੋ ਫਾਈਲਾਂ ਨੂੰ ਜੋੜਨਾ, ਅਤੇ ਅਪਲੋਡ ਦੀ ਸੁਰੱਖਿਤ ਢੰਗ ਨਾਲ ਪ੍ਰਮਾਣਿਕਤਾ ਚੈਕ ਕਰਨਾ ਜਾਣਨਾ ਅਸਲ-ਦੁਨੀਆ ਦੇ APIs ਬਣਾਉਣ ਲਈ ਮੁਖ ਵਿਹਾਰਕ ਜ਼ਾਨਕਾਰੀ ਹੈ ਜੋ ਉਪਯੋਗਕਰਤਾ-ਜਮ੍ਹਾ ਸਮੱਗਰੀ ਨੂੰ ਪ੍ਰਵਾਹ ਕਰਦੇ ਹਨ।