Flask অ্যাপ্লিকেশনে ফাইল এবং ইমেজ আপলোড করা একটি সাধারণ এবং গুরুত্বপূর্ণ কার্যকলাপ। Flask আপনাকে ফাইল আপলোড করার জন্য সিম্পল কিন্তু শক্তিশালী সিস্টেম সরবরাহ করে, যেখানে আপনি আপলোড করা ফাইলগুলি সঠিকভাবে সেভ, প্রক্রিয়া এবং সুরক্ষিতভাবে পরিচালনা করতে পারবেন।
এই টিউটোরিয়ালে, আমরা দেখব কিভাবে Flask অ্যাপে ফাইল এবং ইমেজ আপলোড কনফিগার করা যায়।
১. Flask-এ ফাইল আপলোড কনফিগারেশন
ধাপ ১: Flask ইনস্টলেশন
প্রথমেই Flask ইনস্টল করতে হবে (যদি ইতিমধ্যে ইনস্টল না করা থাকে):
pip install flask
ধাপ ২: ফাইল আপলোডের জন্য ফোল্ডার তৈরি করা
ফাইল এবং ইমেজ আপলোড করার জন্য আপনাকে একটি ডিরেক্টরি তৈরি করতে হবে যেখানে আপলোড করা ফাইলগুলো সংরক্ষিত হবে।
flask_project/
├── app.py # Flask অ্যাপ ফাইল
└── uploads/ # ফাইল আপলোড ফোল্ডার
এখানে uploads/ ফোল্ডার তৈরি করা হয়েছে, যেখানে ফাইল আপলোড হবে।
২. Flask অ্যাপে ফাইল আপলোড কনফিগারেশন
এখন, Flask অ্যাপে ফাইল আপলোড কনফিগারেশন করতে হবে। এটি করার জন্য, কিছু কনফিগারেশন ভেরিয়েবল সেট করা প্রয়োজন:
- UPLOAD_FOLDER: ফোল্ডার যেখানে ফাইলগুলো সংরক্ষিত হবে।
- ALLOWED_EXTENSIONS: আপলোড করার জন্য অনুমোদিত ফাইল এক্সটেনশন (যেমন:
.jpg,.png,.pdfইত্যাদি)। - MAX_CONTENT_LENGTH: আপলোড করা ফাইলের সর্বোচ্চ সাইজ সীমা নির্ধারণ।
উদাহরণ:
from flask import Flask, request, redirect, url_for
import os
app = Flask(__name__)
# ফাইল আপলোড ফোল্ডার এবং সীমাবদ্ধতা কনফিগারেশন
app.config['UPLOAD_FOLDER'] = 'uploads'
app.config['ALLOWED_EXTENSIONS'] = {'png', 'jpg', 'jpeg', 'gif'}
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 16 MB পর্যন্ত ফাইল আপলোড অনুমোদিত
# ফাইল এক্সটেনশন চেক করার জন্য ফাংশন
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
@app.route("/", methods=["GET", "POST"])
def upload_file():
if request.method == "POST":
# ফাইল যাচাই
if 'file' not in request.files:
return "No file part"
file = request.files['file']
# ফাইলের নাম চেক করা
if file.filename == '':
return "No selected file"
# ফাইল এক্সটেনশন চেক করা
if file and allowed_file(file.filename):
filename = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)
file.save(filename)
return f"ফাইল সফলভাবে আপলোড হয়েছে: {filename}"
else:
return "অনুমোদিত ফাইল এক্সটেনশন নয়"
return '''
<!doctype html>
<title>Upload new File</title>
<h1>ফাইল আপলোড করুন</h1>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
'''
if __name__ == "__main__":
app.run(debug=True)
এখানে:
UPLOAD_FOLDER:uploads/ফোল্ডারকে ডিফাইন করা হয়েছে, যেখানে ফাইলগুলি সংরক্ষিত হবে।ALLOWED_EXTENSIONS: অনুমোদিত ফাইল এক্সটেনশন গুলি নির্ধারণ করা হয়েছে (যেমন:.png,.jpg,.jpeg,.gif)।MAX_CONTENT_LENGTH: ফাইলের সর্বোচ্চ সাইজ ১৬ MB নির্ধারণ করা হয়েছে।
এই কোডে, POST রিকোয়েস্টের মাধ্যমে একটি ফাইল আপলোড করার ব্যবস্থা আছে। ব্যবহারকারী একটি ফাইল নির্বাচন করে এবং সাবমিট করলে, ফাইলটি uploads/ ফোল্ডারে সেভ হবে।
৩. ফাইল আপলোড করার HTML ফর্ম
এখানে ফাইল আপলোড করার জন্য HTML ফর্ম তৈরি করা হয়েছে:
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
enctype="multipart/form-data": এটি ফাইল আপলোড করার জন্য প্রয়োজনীয় কোড যা ব্রাউজারকে জানায় যে এটি ফর্মের মাধ্যমে একটি ফাইল পাঠাচ্ছে।
৪. Flask-এ Image Upload কনফিগারেশন
ইমেজ আপলোডের জন্যও একই ধরনের কনফিগারেশন অনুসরণ করা হয়। শুধুমাত্র ALLOWED_EXTENSIONS-এ ইমেজ এক্সটেনশনগুলি অন্তর্ভুক্ত করতে হবে।
উদাহরণ:
@app.route("/upload_image", methods=["POST"])
def upload_image():
if request.method == "POST":
if 'image' not in request.files:
return "No image part"
image = request.files['image']
if image.filename == '':
return "No selected image"
if image and allowed_file(image.filename):
image_filename = os.path.join(app.config['UPLOAD_FOLDER'], image.filename)
image.save(image_filename)
return f"ইমেজ সফলভাবে আপলোড হয়েছে: {image_filename}"
else:
return "অনুমোদিত ইমেজ এক্সটেনশন নয়"
এখানে:
allowed_file(image.filename): ইমেজের এক্সটেনশন চেক করা হয় (যেমন:.jpg,.png,.jpegইত্যাদি)।- ফাইলটি সেভ করার পর ইমেজের URL বা পাথ রিটার্ন করা হয়।
৫. Flask-এ ফাইল আপলোড করার নিরাপত্তা বিষয়ক সতর্কতা
ফাইল আপলোড করার সময় কিছু নিরাপত্তা সতর্কতা মানা খুবই গুরুত্বপূর্ণ:
- ফাইলের নাম: ফাইলের নাম সরাসরি ব্যবহার না করে, একটি নিরাপদ নাম ব্যবহার করুন (যেমন: ইউজারের দেওয়া নামের পরিবর্তে
secure_filename()ব্যবহার করা)। - ফাইলের সাইজ: সর্বাধিক অনুমোদিত ফাইল সাইজ সীমা নির্ধারণ করুন।
- ফাইল এক্সটেনশন চেকিং: শুধুমাত্র অনুমোদিত এক্সটেনশনগুলির ফাইল আপলোড করতে দিন।
- ফাইলের ধরণ: শুধুমাত্র প্রয়োজনীয় ফাইল টাইপ (যেমন: ইমেজ, পিডিএফ) আপলোড করতে দিন, এবং ম্যালওয়্যার স্ক্যানিং প্রক্রিয়া করতে পারেন।
Flask অ্যাপে ফাইল এবং ইমেজ আপলোড কনফিগারেশন করা খুবই সহজ এবং নমনীয়। আপনি কাস্টম কনফিগারেশন দিয়ে নিরাপদভাবে ফাইল আপলোড করতে পারেন এবং ব্যবহারকারীর জন্য একটি কার্যকরী ফাইল আপলোড সিস্টেম তৈরি করতে পারেন। Flask-এ ফাইল আপলোডের জন্য নিরাপত্তা, সাইজ সীমা, এবং এক্সটেনশন চেকিং খুবই গুরুত্বপূর্ণ, যা অ্যাপ্লিকেশনটি নিরাপদ রাখতে সাহায্য করে।
Read more