Flask-এ File Upload এবং File Handling খুবই সহজ এবং শক্তিশালী ফিচার। আপনি Flask অ্যাপ্লিকেশনে ফাইল আপলোড এবং সেগুলোর পরিচালনা করার জন্য কনফিগারেশন এবং কোড ব্যবহার করতে পারেন। Flask-এ ফাইল আপলোড করতে request.files অবজেক্ট এবং ফাইল সেভ করতে secure_filename() ফাংশন ব্যবহার করা হয়।
এখানে Flask অ্যাপ্লিকেশনে ফাইল আপলোড এবং ফাইল হ্যান্ডলিং কনফিগার করার পদ্ধতি দেখানো হবে।
১. Flask File Upload কনফিগারেশন
Flask-এ ফাইল আপলোড করতে UPLOAD_FOLDER কনফিগারেশন সেট করা হয়, যাতে আপলোড করা ফাইল সেভ করা যায়। এছাড়াও, ফাইলের ধরন এবং আকার নির্ধারণ করা হয়।
ধাপ ১: Flask অ্যাপ্লিকেশন সেটআপ করা
প্রথমে Flask অ্যাপ তৈরি করুন এবং ফাইল আপলোডের জন্য কনফিগারেশন সেট করুন:
from flask import Flask, request, render_template, redirect, url_for, flash
from werkzeug.utils import secure_filename
import os
app = Flask(__name__)
# ফাইল আপলোডের কনফিগারেশন
app.config['UPLOAD_FOLDER'] = 'uploads/' # ফোল্ডারের পাথ যেখানে ফাইল সেভ হবে
app.config['ALLOWED_EXTENSIONS'] = {'png', 'jpg', 'jpeg', 'gif', 'pdf'} # অনুমোদিত এক্সটেনশন
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # সর্বাধিক ফাইল আকার 16MB
# ফাইল এক্সটেনশন চেক করার জন্য ফাংশন
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
@app.route('/')
def home():
return render_template('index.html')
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename) # সিকিউর ফাইল নাম
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) # ফাইল সেভ করা
flash('File successfully uploaded')
return redirect(url_for('home'))
else:
flash('File type not allowed')
return redirect(request.url)
if __name__ == "__main__":
app.run(debug=True)
এখানে:
UPLOAD_FOLDER: ফোল্ডার যেখানে আপলোড করা ফাইল সেভ হবে।ALLOWED_EXTENSIONS: শুধুমাত্র নির্দিষ্ট এক্সটেনশনের ফাইলগুলোকে অনুমোদিত করা হয়েছে (যেমন,.png,.jpg,.jpeg,.pdfইত্যাদি)।MAX_CONTENT_LENGTH: সর্বাধিক ফাইল আকার 16MB নির্ধারণ করা হয়েছে। আপনি এটি পরিবর্তন করতে পারেন।
২. HTML ফর্ম তৈরি করা
ফাইল আপলোডের জন্য একটি HTML ফর্ম তৈরি করতে হবে।
templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>File Upload</title>
</head>
<body>
<h1>Upload a File</h1>
<form action="/upload" method="POST" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">Upload</button>
</form>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
</body>
</html>
এখানে:
enctype="multipart/form-data": ফর্মে ফাইল আপলোডের জন্য এই অ্যাট্রিবিউটটি নির্ধারণ করতে হবে।<input type="file" name="file">: ফাইল ইনপুট ফিল্ড।
৩. File Handling (সেভ, রিড, এবং ডিলিট)
ফাইল সেভ করা:
ফাইল সেভ করতে file.save() ফাংশন ব্যবহার করা হয়, যা আপলোড করা ফাইলটি নির্দিষ্ট ফোল্ডারে সেভ করে।
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
ফাইল রিড করা:
আপনি ফাইল সিস্টেম থেকে ফাইল রিড করতে পারেন, যেমন একটি পিডিএফ বা ইমেজ ফাইল শো করার জন্য।
@app.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
ফাইল ডিলিট করা:
আপনি ফাইলটি ডিলিট করতে পারেন os.remove() ফাংশন দিয়ে:
import os
@app.route('/delete/<filename>')
def delete_file(filename):
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
if os.path.exists(file_path):
os.remove(file_path)
flash('File deleted successfully')
else:
flash('File not found')
return redirect(url_for('home'))
৪. File Upload Example Testing
Flask অ্যাপ চালানোর পর, ব্রাউজারে http://127.0.0.1:5000/ URL এ গিয়ে ফাইল আপলোড ফর্ম দেখতে পাবেন। এখানে আপনি একটি ফাইল সিলেক্ট করে আপলোড করতে পারবেন এবং সফলভাবে আপলোড হলে একটি মেসেজ দেখাবে।
আপলোড করা ফাইলটি uploads/ ফোল্ডারে সেভ হবে। আপনি সেই ফাইলটি সিস্টেমে দেখতে পারবেন।
৫. File Upload নিরাপত্তা টিপস
- File Type Validation: শুধুমাত্র অনুমোদিত ফাইল এক্সটেনশন (যেমন
.jpg,.png,.pdf) আপলোডের অনুমতি দিন।allowed_file()ফাংশন ব্যবহার করে ফাইল টাইপ চেক করা হয়েছে।
- File Size Limitation: ফাইলের আকার সীমাবদ্ধ করুন, যেমন 16MB (এটি
MAX_CONTENT_LENGTHদিয়ে করা হয়েছে)। - File Name Sanitization: ফাইল নাম সিকিউর করার জন্য
secure_filename()ব্যবহার করুন। এটি কোনও বিশেষ চিহ্ন বা অপ্রত্যাশিত অক্ষর ফাইল নাম থেকে সরিয়ে দেয়। - Use Separate Directory for Uploads: আপলোড করা ফাইলগুলির জন্য একটি আলাদা ফোল্ডার ব্যবহার করুন এবং সেটিকে ওয়েব সার্ভার থেকে সুরক্ষিত রাখুন।
Flask-এ File Upload এবং File Handling একটি সহজ এবং কার্যকরী প্রক্রিয়া। আপনি secure_filename() ব্যবহার করে ফাইল নাম সুরক্ষিত করতে পারেন, request.files দ্বারা ফাইল গ্রহণ করতে পারেন এবং save() ফাংশন দ্বারা সেগুলি সেভ করতে পারেন। ফাইল সাইজ লিমিটেশন এবং ফাইল টাইপ ভ্যালিডেশন ব্যবহার করে আপনি সুরক্ষিতভাবে ফাইল আপলোড করতে পারেন। Flask-এ এই ফিচারটি সহজে ইন্টিগ্রেট করা যায় এবং এটি আপনার অ্যাপ্লিকেশনের কার্যকারিতা বাড়ায়।