FastAPI তে File Handling এবং Temporary Files Management খুবই সহজ। FastAPI আপনাকে ফাইল আপলোড এবং ডাউনলোড করার জন্য শক্তিশালী API প্রদান করে। এটি ফাইলের আকার, টাইপ যাচাই এবং ফাইল সঞ্চয়ের জন্য UploadFile এবং File ক্লাসের মাধ্যমে ফাইল হ্যান্ডলিং পরিচালনা করতে সক্ষম।
এখানে আমরা দেখব কিভাবে FastAPI তে ফাইল আপলোড, ফাইল সঞ্চয় এবং Temporary Files ম্যানেজমেন্ট করা যায়।
FastAPI তে ফাইল আপলোড করা
FastAPI তে ফাইল আপলোড করার জন্য UploadFile ক্লাস ব্যবহার করা হয়, যা File ক্লাসের সাথে মিলে কাজ করে। এটি ফাইলের মেটাডেটা যেমন ফাইলের নাম, কনটেন্ট টাইপ ইত্যাদি সহজেই অ্যাক্সেস করতে সাহায্য করে।
ফাইল আপলোডের উদাহরণ:
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import HTMLResponse
app = FastAPI()
@app.post("/uploadfile/")
async def upload_file(file: UploadFile = File(...)):
return {"filename": file.filename, "content_type": file.content_type}
এখানে:
UploadFile: ফাইল আপলোডের জন্য ব্যবহৃত ক্লাস।File(...): ফাইল ইনপুট হিসেবে প্যারামিটার।
ফাইল আপলোডের HTML ফর্ম:
<form action="/uploadfile/" enctype="multipart/form-data" method="post">
<input type="file" name="file">
<input type="submit">
</form>
এখানে, ফর্মের মাধ্যমে ফাইলটি আপলোড করা হয়।
রেসপন্স:
{
"filename": "example.txt",
"content_type": "text/plain"
}
এখানে ফাইলের নাম এবং কনটেন্ট টাইপ রেসপন্সে ফিরিয়ে দেওয়া হয়েছে।
Temporary Files (অস্থায়ী ফাইল)
FastAPI তে Temporary Files ম্যানেজ করতে tempfile লাইব্রেরি ব্যবহার করা হয়। এটি সাধারণত আপলোড করা ফাইল সংরক্ষণ করার জন্য ব্যবহৃত হয় এবং বিশেষত ডেটা প্রক্রিয়াকরণের পরে ফাইল ডিলিট করতে সহায়ক।
উদাহরণ: আপলোড করা ফাইলের জন্য অস্থায়ী ফাইল তৈরি করা
import tempfile
from fastapi import FastAPI, UploadFile, File
app = FastAPI()
@app.post("/uploadfile/")
async def create_temp_file(file: UploadFile = File(...)):
# অস্থায়ী ফাইল তৈরি করা
with tempfile.NamedTemporaryFile(delete=False) as temp_file:
content = await file.read() # ফাইলের কনটেন্ট পড়া
temp_file.write(content) # কনটেন্ট অস্থায়ী ফাইলে লেখা
temp_file_path = temp_file.name # অস্থায়ী ফাইলের পাথ
return {"temp_file_path": temp_file_path}
এখানে:
tempfile.NamedTemporaryFile: একটি অস্থায়ী ফাইল তৈরি করতে ব্যবহৃত হয়।delete=False: এটি অস্থায়ী ফাইলটি ডিলিট না করতে সহায়ক, তাই আপনি এটি পরে ব্যবহার করতে পারেন।
রেসপন্স:
{
"temp_file_path": "/tmp/tmpabcdef12"
}
এখানে, ফাইলটির অস্থায়ী পাথ ফেরত দেওয়া হয়েছে।
File Upload Handling with Streaming
FastAPI তে ফাইল আপলোডের জন্য streaming এর মাধ্যমে ডাটা পাঠানো যেতে পারে। এই প্রক্রিয়া বড় ফাইলগুলো আপলোড করতে সহায়ক।
from fastapi import FastAPI, File, UploadFile
from io import BytesIO
app = FastAPI()
@app.post("/upload_large_file/")
async def upload_large_file(file: UploadFile = File(...)):
content = await file.read() # পুরো ফাইলটি স্ট্রীমের মাধ্যমে পড়া
# প্রয়োজনীয় ডাটা প্রসেস করা (যেমন সেভ করা, বা অন্য কিছু)
return {"filename": file.filename, "file_size": len(content)}
এখানে, ফাইলটি streaming করে পড়া হয়েছে, যা বড় ফাইল আপলোডের সময় কার্যকর।
File Downloading
FastAPI তে ফাইল ডাউনলোডের জন্য FileResponse ব্যবহার করা হয়। এটি সার্ভার থেকে ক্লায়েন্টে ফাইল পাঠানোর জন্য ব্যবহৃত হয়।
উদাহরণ: File Download
from fastapi import FastAPI
from fastapi.responses import FileResponse
import os
app = FastAPI()
@app.get("/downloadfile/")
async def download_file():
file_path = "/path/to/your/file.txt"
return FileResponse(file_path, media_type="application/octet-stream", filename="file.txt")
এখানে FileResponse ক্লাস ফাইলটি পাঠানোর জন্য ব্যবহৃত হয়।
রেসপন্স:
এটি ক্লায়েন্টের ব্রাউজারে ফাইলটি ডাউনলোড করতে সহায়ক হবে।
File Size Validation
FastAPI তে ফাইলের আকার যাচাই করার জন্য আপনি File এবং UploadFile প্যারামিটার ব্যবহার করতে পারেন এবং যদি ফাইলের আকার খুব বড় হয়, তবে ত্রুটি প্রদান করতে পারেন।
উদাহরণ: File Size Validation
from fastapi import FastAPI, File, UploadFile, HTTPException
app = FastAPI()
@app.post("/uploadfile/")
async def upload_file(file: UploadFile = File(...)):
max_file_size = 5 * 1024 * 1024 # 5MB
if len(await file.read()) > max_file_size:
raise HTTPException(status_code=400, detail="File size exceeds the limit of 5MB")
return {"filename": file.filename}
এখানে, ফাইলের আকার যাচাই করা হয়েছে এবং যদি তা ৫MB এর বেশি হয়, তবে ত্রুটি রেসপন্স প্রদান করা হয়।
File Handling in Background Tasks
আপনি ফাইল আপলোডের পরে ফাইল প্রক্রিয়াকরণের জন্য background tasks ব্যবহার করতে পারেন। FastAPI তে BackgroundTasks ক্লাস এই কাজের জন্য ব্যবহৃত হয়।
উদাহরণ: File Handling with Background Task
from fastapi import FastAPI, UploadFile, File, BackgroundTasks
import time
app = FastAPI()
def process_file(file_name: str):
# ফাইল প্রক্রিয়াকরণ সিমুলেশন
time.sleep(5)
print(f"File {file_name} processed!")
@app.post("/uploadfile/")
async def upload_file(file: UploadFile = File(...), background_tasks: BackgroundTasks):
background_tasks.add_task(process_file, file.filename)
return {"message": "File is being processed in the background"}
এখানে, BackgroundTasks ব্যবহার করা হয়েছে যাতে ফাইল আপলোডের পরে ফাইল প্রক্রিয়াকরণ ব্যাকগ্রাউন্ডে চলে।
FastAPI তে File Handling এবং Temporary Files Management সহজে করা যায়। আপনি ফাইল আপলোড করতে UploadFile, ফাইল ডাউনলোড করতে FileResponse, এবং অস্থায়ী ফাইল ব্যবস্থাপনার জন্য tempfile ব্যবহার করতে পারেন। এছাড়া background tasks এর মাধ্যমে আপনি ফাইল প্রক্রিয়াকরণ ব্যাকগ্রাউন্ডে পরিচালনা করতে পারবেন। FastAPI ফাইল হ্যান্ডলিংয়ের জন্য একটি শক্তিশালী এবং স্কেলেবল সমাধান প্রদান করে।
Read more