Flask-এ Static Files এবং Media Handling গুরুত্বপূর্ণ অংশ। স্ট্যাটিক ফাইলগুলি হলো সেই ফাইলগুলি (যেমন CSS, JavaScript, চিত্র, ইত্যাদি) যা ব্যবহারকারীদের ব্রাউজারে সরাসরি পরিবেশন (serve) করা হয়, এবং মিডিয়া ফাইলগুলি (যেমন ইউজার আপলোড করা ফটো, ভিডিও, ডকুমেন্ট ইত্যাদি) সাধারণত ডাইনামিকভাবে পরিচালিত হয়। Flask-এ স্ট্যাটিক ফাইল এবং মিডিয়া ফাইল ব্যবস্থাপনা খুবই সহজ এবং নমনীয়।
১. Flask Static Files
Flask অ্যাপ্লিকেশন স্বয়ংক্রিয়ভাবে একটি static ফোল্ডার তৈরি করে যেখানে স্ট্যাটিক ফাইল রাখা হয়। Flask এই ফোল্ডারের মধ্যে থাকা ফাইলগুলো সরাসরি পরিবেশন করতে পারে।
স্ট্যাটিক ফাইলের ডিরেক্টরি
প্রতিটি Flask অ্যাপ্লিকেশনে static নামে একটি ডিরেক্টরি থাকে, যেখানে আপনি আপনার CSS, JavaScript, ছবি ইত্যাদি ফাইল রাখেন। Flask স্বয়ংক্রিয়ভাবে এই ফোল্ডার থেকে ফাইলগুলো সরবরাহ করবে।
উদাহরণ:
প্রথমে একটি ফোল্ডার তৈরি করুন:
flask_project/ ├── app.py └── static/ ├── css/ │ └── style.css ├── js/ │ └── script.js └── images/ └── logo.png- Flask অ্যাপ্লিকেশন কোড:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def home():
return render_template("index.html")
if __name__ == "__main__":
app.run(debug=True)
- HTML টেমপ্লেট (
index.html) ব্যবহার:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flask Static Example</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body>
<h1>Flask Static File Example</h1>
<img src="{{ url_for('static', filename='images/logo.png') }}" alt="Logo">
<script src="{{ url_for('static', filename='js/script.js') }}"></script>
</body>
</html>
এখানে:
url_for('static', filename='css/style.css'): এটি স্ট্যাটিক ফাইলের সঠিক URL তৈরি করবে। Flask এই ফাইলটি/static/css/style.cssURL থেকে সরবরাহ করবে।url_for('static', filename='images/logo.png'): এটি স্ট্যাটিক চিত্রlogo.pngএর জন্য URL তৈরি করবে।
২. Flask Static Files Serve (Serve Static Files)
Flask সাধারণত স্ট্যাটিক ফাইলগুলিকে সরবরাহ করার জন্য static ফোল্ডার ব্যবহার করে। আপনি যদি স্ট্যাটিক ফাইল সরবরাহ করতে চান, তবে Flask এর রাউটিং সিস্টেম স্বয়ংক্রিয়ভাবে /static URL পাথ দিয়ে এগুলি সরবরাহ করবে।
স্ট্যাটিক ফাইলের URL:
স্ট্যাটিক ফাইলকে Flask সরবরাহ করবে:
/static/css/style.css
/static/js/script.js
/static/images/logo.png
৩. Media Handling (User-uploaded files)
Flask-এ ইউজারদের দ্বারা আপলোড করা মিডিয়া ফাইল (যেমন চিত্র, ভিডিও, ডকুমেন্ট) সরবরাহ করা অনেক বেশি নমনীয় হতে পারে। সাধারণত, মিডিয়া ফাইলগুলিকে ডাইনামিকভাবে সংরক্ষণ ও পরিবেশন করা হয়।
৩.১ Media File Upload Handling
Flask অ্যাপ্লিকেশনে মিডিয়া ফাইল আপলোড করার জন্য request অবজেক্টের মাধ্যমে ফাইল প্রাপ্তি এবং স্টোরেজ পরিচালনা করা হয়।
- ফাইল আপলোডের জন্য Flask অ্যাপ্লিকেশন:
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'}
# অনুমোদিত ফাইল এক্সটেনশন চেক করা
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
@app.route("/upload", methods=["GET", "POST"])
def upload_file():
if request.method == "POST":
file = request.files['file']
if file and allowed_file(file.filename):
filename = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)
file.save(filename)
return f"ফাইল আপলোড হয়েছে: {file.filename}"
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_file(): একটি ফাংশন যা নিশ্চিত করে যে আপলোড করা ফাইলটি অনুমোদিত এক্সটেনশনের (যেমন.png,.jpg) সাথে মেলে।
৩.২ Media File Serve (Serve Media Files)
যেহেতু মিডিয়া ফাইলগুলি ব্যবহারকারী দ্বারা আপলোড করা হয়, তাই আপনি এই ফাইলগুলোকে পরিবেশন করতে পারেন send_from_directory ফাংশন ব্যবহার করে।
from flask import send_from_directory
@app.route("/uploads/<filename>")
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
এখানে:
send_from_directory(): এটি ফাইলটি সরাসরি সঠিক পাথ থেকে পরিবেশন করে।
মিডিয়া ফাইলের URL:
- যদি আপনি একটি চিত্র আপলোড করেন, তবে এটি
/uploads/filename.jpgএর মতো একটি URL দ্বারা সরবরাহ করা হবে।
৪. Flask Static এবং Media Handling এর সুবিধা
- স্বয়ংক্রিয় স্ট্যাটিক ফাইল ব্যবস্থাপনা: Flask স্ট্যাটিক ফাইলগুলি সহজেই সরবরাহ করে
/staticপাথের মাধ্যমে। - ডাইনামিক মিডিয়া আপলোড এবং সরবরাহ: ইউজারের মাধ্যমে আপলোড করা মিডিয়া ফাইলগুলি খুব সহজে Flask এর মাধ্যমে ডাইনামিকভাবে সংরক্ষণ এবং পরিবেশন করা যায়।
- নিরাপত্তা: Flask অ্যাপ্লিকেশন থেকে স্ট্যাটিক এবং মিডিয়া ফাইলগুলো যথাযথ নিরাপত্তার সাথে সরবরাহ করা যায়।
- কাস্টমাইজড স্টোরেজ পাথ: স্ট্যাটিক এবং মিডিয়া ফাইলের জন্য স্টোরেজ পাথ এবং ডিরেক্টরি কাস্টমাইজ করা সম্ভব।
Flask-এ Static Files এবং Media Handling খুবই সহজ ও শক্তিশালী। Flask আপনার স্ট্যাটিক ফাইলগুলো সরবরাহ করতে /static ডিরেক্টরি ব্যবহারের মাধ্যমে স্বয়ংক্রিয়ভাবে কাজ করে এবং মিডিয়া ফাইলগুলো ব্যবহারকারীর মাধ্যমে ডাইনামিকভাবে আপলোড ও সরবরাহ করা যায়। এর ফলে, আপনার অ্যাপ্লিকেশন আরও নমনীয় এবং কার্যকরী হয়ে ওঠে।
Flask অ্যাপ্লিকেশনে Static Files ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ, কারণ সেগুলি ওয়েব পেজে উপস্থাপনার জন্য ব্যবহৃত হয়। Static files বলতে সাধারণত HTML পেজের সাথে যুক্ত CSS, JavaScript, এবং Images বোঝায়। Flask-এ এই ধরনের ফাইলগুলি একটি নির্দিষ্ট ফোল্ডারে সংরক্ষণ করা হয় এবং Flask স্বয়ংক্রিয়ভাবে সেগুলিকে সার্ভ করে থাকে।
Flask-এ Static Files ব্যবস্থাপনা
Flask-এ স্ট্যাটিক ফাইলের জন্য ডিফল্ট ফোল্ডার হলো static/। আপনি CSS, JavaScript, এবং ছবি ইত্যাদি এই ফোল্ডারে রাখবেন এবং Flask স্বয়ংক্রিয়ভাবে তাদের সার্ভ করবে।
১. Static ফোল্ডার সেটআপ
Flask ডিফল্টভাবে static/ নামের একটি ফোল্ডার তৈরি করে, যেখানে আপনি আপনার CSS, JavaScript, এবং ইমেজ ফাইলগুলি রাখবেন।
ফোল্ডারের কাঠামো কিছুটা এরকম হতে পারে:
flask_project/
├── app.py
├── static/
│ ├── css/
│ │ └── style.css
│ ├── js/
│ │ └── script.js
│ └── images/
│ └── logo.png
└── templates/
└── index.html
এখানে:
static/: স্ট্যাটিক ফাইল রাখার জন্য ফোল্ডার।css/: CSS ফাইল সংরক্ষণের জন্য সাব-ফোল্ডার।js/: JavaScript ফাইল সংরক্ষণের জন্য সাব-ফোল্ডার।images/: চিত্র ফাইল সংরক্ষণের জন্য সাব-ফোল্ডার।
২. Static Files ব্যবহার করা
Flask-এ স্ট্যাটিক ফাইলগুলোকে ব্যবহার করতে সাধারণভাবে url_for() ফাংশন ব্যবহার করা হয়, যা সঠিক স্ট্যাটিক ফাইলের URL তৈরি করতে সাহায্য করে।
উদাহরণ:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flask অ্যাপ</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body>
<h1>স্বাগতম Flask অ্যাপে!</h1>
<img src="{{ url_for('static', filename='images/logo.png') }}" alt="Logo">
<script src="{{ url_for('static', filename='js/script.js') }}"></script>
</body>
</html>
এখানে:
url_for('static', filename='css/style.css'): এটি স্ট্যাটিক CSS ফাইলের জন্য সঠিক URL তৈরি করে।url_for('static', filename='images/logo.png'): এটি স্ট্যাটিক ইমেজ ফাইলের জন্য URL তৈরি করে।url_for('static', filename='js/script.js'): এটি স্ট্যাটিক JavaScript ফাইলের জন্য URL তৈরি করে।
Flask স্বয়ংক্রিয়ভাবে /static/ পাথের মাধ্যমে স্ট্যাটিক ফাইল সার্ভ করে থাকে। উদাহরণস্বরূপ, style.css ফাইলটি আসলে /static/css/style.css পাথের মাধ্যমে সার্ভ হবে।
৩. Static ফাইলগুলির রুট (URL Path)
Flask-এ স্ট্যাটিক ফাইলগুলির রুট বা URL পাথ হল /static/। Flask নিজে স্ট্যাটিক ফাইলগুলিকে /static/ পাথের মাধ্যমে অ্যাক্সেস করে থাকে। স্ট্যাটিক ফাইলগুলি Flask অ্যাপ্লিকেশনের static/ ফোল্ডারে থাকা উচিত।
যদি আপনার স্ট্যাটিক ফাইলের পথ কিছুটা আলাদা রাখতে চান, তাহলে Flask কনফিগারেশন সেটিংস ব্যবহার করতে পারেন:
app = Flask(__name__, static_folder="public")
এখন Flask স্ট্যাটিক ফাইলগুলো public/ ফোল্ডার থেকে সার্ভ করবে।
৪. Flask-এ Static Files এর কাস্টম রুট
আপনি যদি আপনার স্ট্যাটিক ফাইলের জন্য কাস্টম URL পাথ চান, Flask-এ সেটি করা সম্ভব।
from flask import Flask
app = Flask(__name__, static_url_path="/assets", static_folder="static")
@app.route("/")
def home():
return "স্ট্যাটিক ফাইল অ্যাক্সেস করুন /assets পাথ থেকে!"
if __name__ == "__main__":
app.run(debug=True)
এখানে:
static_url_path: এটি স্ট্যাটিক ফাইলের URL পাথ কাস্টমাইজ করার জন্য ব্যবহৃত হয়। এখানে/assetsপাথ সেট করা হয়েছে।- Flask স্বয়ংক্রিয়ভাবে
/assets/পাথের মাধ্যমে স্ট্যাটিক ফাইল সার্ভ করবে।
৫. Static File Caching এবং Versioning
Flask সাধারণত স্ট্যাটিক ফাইল ক্যাশিং এবং ভার্সনিং সরবরাহ করে না। তবে, আপনি স্ট্যাটিক ফাইলের ভার্সনিং চালু করতে send_from_directory ফাংশন ব্যবহার করতে পারেন, যা স্ট্যাটিক ফাইলগুলিকে কাস্টম রুট দিয়ে সার্ভ করতে সহায়ক।
উদাহরণ:
from flask import Flask, send_from_directory
app = Flask(__name__)
@app.route('/files/<path:filename>')
def serve_static_file(filename):
return send_from_directory('static', filename)
if __name__ == "__main__":
app.run(debug=True)
এখানে:
send_from_directory()ফাংশনটি কাস্টম পাথ থেকে ফাইল পাঠানোর জন্য ব্যবহৃত হয়।
৬. স্ট্যাটিক ফাইল আপলোড এবং ফাইল সাইজ সীমাবদ্ধতা
Flask-এ স্ট্যাটিক ফাইল আপলোড করার সময়, আপনি চাইলে ফাইলের সাইজ সীমাবদ্ধ করতে পারেন।
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 16 MB পর্যন্ত ফাইল আপলোড অনুমোদিত
এটি অ্যাপ্লিকেশনটিকে বড় সাইজের ফাইল আপলোড থেকে সীমাবদ্ধ করতে সহায়তা করবে।
Flask-এ Static Files (CSS, JS, Images) ব্যবস্থাপনা করা খুবই সহজ এবং শক্তিশালী। Flask নিজেই স্ট্যাটিক ফাইলগুলিকে /static/ পাথের মাধ্যমে সার্ভ করে এবং url_for() ফাংশনের মাধ্যমে এগুলি অ্যাক্সেস করা যায়। আপনি কাস্টম রুট, ভার্সনিং, এবং ক্যাশিং সহ স্ট্যাটিক ফাইলগুলিকে কার্যকরভাবে পরিচালনা করতে পারেন। Flask অ্যাপ্লিকেশন তৈরির সময় স্ট্যাটিক ফাইল ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে ব্যবহারকারীর ইন্টারফেসের জন্য।
Flask একটি মাইক্রোফ্রেমওয়ার্ক, এবং এটি সহজেই স্ট্যাটিক ফাইল পরিচালনা করতে সহায়ক। স্ট্যাটিক ফাইল বলতে CSS, JavaScript, ইমেজ এবং অন্যান্য ফাইলগুলি বোঝায় যেগুলি সরাসরি ক্লায়েন্ট ব্রাউজারে রেন্ডার হয় এবং পরিবর্তন হয় না। Flask-এ স্ট্যাটিক ফাইলের জন্য ডিফল্টভাবে একটি static/ নামক ফোল্ডার ব্যবহার করা হয়।
১. Flask-এ Static Folder সেটআপ করা
Flask অ্যাপ্লিকেশনের মধ্যে স্ট্যাটিক ফোল্ডার একটি ডিফল্ট ফোল্ডার, যেখানে CSS, JavaScript, এবং ইমেজ ফাইল রাখা হয়। Flask নিজে থেকেই এই ফোল্ডারে রাখা ফাইলগুলোকে সঠিকভাবে সেবা প্রদান করে।
উদাহরণ:
আপনি Flask প্রজেক্টের মূল ফোল্ডারে একটি static/ ফোল্ডার তৈরি করবেন। এর মধ্যে আপনার CSS, JavaScript, এবং ইমেজ ফাইল রাখতে পারেন।
flask_project/
├── app.py
├── static/
│ ├── css/
│ │ └── style.css
│ ├── js/
│ │ └── script.js
│ └── images/
│ └── logo.png
└── templates/
└── index.html
এখানে:
- static/css/style.css: CSS ফাইল।
- static/js/script.js: JavaScript ফাইল।
- static/images/logo.png: ইমেজ ফাইল।
২. Static ফাইল ব্রাউজারে লোড করা
Flask-এ static ফোল্ডারে রাখা ফাইল অ্যাক্সেস করতে, আপনি URL এর মাধ্যমে সরাসরি অ্যাক্সেস করতে পারবেন। Flask স্বয়ংক্রিয়ভাবে static/ ফোল্ডারের ফাইলগুলো সার্ভ করে।
উদাহরণ:
- CSS ফাইল লোড করা:
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
- JavaScript ফাইল লোড করা:
<script src="{{ url_for('static', filename='js/script.js') }}"></script>
- ইমেজ ফাইল লোড করা:
<img src="{{ url_for('static', filename='images/logo.png') }}" alt="Logo">
এখানে url_for('static', filename='...') ফাংশনটি Flask-এর static ফোল্ডারে রাখা ফাইলের সঠিক URL তৈরি করে।
৩. Custom Static Folder
যদি আপনি static ফোল্ডারটির নাম পরিবর্তন করতে চান বা অন্য কোনও ফোল্ডারে রাখতে চান, তবে Flask অ্যাপ্লিকেশন ইনিশিয়ালাইজ করার সময় static_folder প্যারামিটার ব্যবহার করতে পারেন।
উদাহরণ:
from flask import Flask
app = Flask(__name__, static_folder='assets')
@app.route("/")
def home():
return "স্বাগতম Flask অ্যাপে!"
if __name__ == "__main__":
app.run(debug=True)
এখানে, static_folder='assets' দ্বারা Flask জানাচ্ছে যে স্ট্যাটিক ফাইলগুলো assets/ ফোল্ডারে থাকবে।
৪. Flask-এ Static ফাইলের URL
Flask-এ স্ট্যাটিক ফাইলের URL সাধারনত /static/ দিয়ে শুরু হয়, উদাহরণস্বরূপ:
- CSS ফাইল:
/static/css/style.css - JavaScript ফাইল:
/static/js/script.js - ইমেজ ফাইল:
/static/images/logo.png
যখন আপনি url_for('static', filename='...') ব্যবহার করেন, Flask নিজে থেকেই সঠিক URL তৈরি করে দেয়।
৫. Flask-এ Static ফাইল সাপোর্ট করার জন্য Template ব্যবহার করা
Flask-এ HTML টেমপ্লেট ফাইলের মধ্যে স্ট্যাটিক ফাইল লিংক যোগ করতে, আপনি url_for() ফাংশন ব্যবহার করতে পারেন। এটি Flask-এর টেমপ্লেট ইঞ্জিন Jinja2-কে ব্যবহার করে।
উদাহরণ:
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>Flask অ্যাপ</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body>
<h1>Flask অ্যাপ্লিকেশন!</h1>
<img src="{{ url_for('static', filename='images/logo.png') }}" alt="Logo">
<script src="{{ url_for('static', filename='js/script.js') }}"></script>
</body>
</html>
এখানে:
url_for('static', filename='css/style.css'): এটি সঠিক URL তৈরি করে যাতে আপনার CSS ফাইলটি ঠিকভাবে লোড হতে পারে।
৬. Custom Static Folder থেকে ফাইল সার্ভিং
Flask একটি কাস্টম স্ট্যাটিক ফোল্ডার থেকে ফাইল সার্ভ করার জন্য send_from_directory() ফাংশন ব্যবহার করতে পারে। এটি যদি আপনি চান যে অন্য কোনো ফোল্ডার থেকে ফাইল সার্ভ করা হোক, তবে ব্যবহার করা হয়।
উদাহরণ:
from flask import Flask, send_from_directory
app = Flask(__name__)
@app.route('/uploads/<filename>')
def download_file(filename):
return send_from_directory('uploads', filename)
if __name__ == "__main__":
app.run(debug=True)
এখানে:
send_from_directory()ফাংশনটি নির্দিষ্ট ডিরেক্টরি থেকে ফাইল পাঠাতে ব্যবহৃত হয়।'uploads'ফোল্ডার থেকে ফাইল সার্ভ করা হচ্ছে।
Flask অ্যাপ্লিকেশনটিতে static folder ব্যবহার করা সহজ এবং শক্তিশালী। এটি আপনাকে CSS, JavaScript, ইমেজ এবং অন্যান্য স্ট্যাটিক ফাইলগুলি ক্লায়েন্ট ব্রাউজারে সরাসরি পরিবেশন করতে সাহায্য করে। আপনি url_for() ফাংশন ব্যবহার করে এই ফাইলগুলোকে ডায়নামিকভাবে লিংক করতে পারেন, এবং কাস্টম ফোল্ডার সেটআপ করে সঠিক URL তৈরি করতে পারেন।
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-এ ফাইল আপলোডের জন্য নিরাপত্তা, সাইজ সীমা, এবং এক্সটেনশন চেকিং খুবই গুরুত্বপূর্ণ, যা অ্যাপ্লিকেশনটি নিরাপদ রাখতে সাহায্য করে।
Flask দিয়ে Multiple File Upload এবং File Validation করা একটি গুরুত্বপূর্ণ কাজ, যা ব্যবহারকারীদের একাধিক ফাইল আপলোড করার সুবিধা দেয় এবং ফাইলগুলোর ধরন, আকার ইত্যাদি যাচাই করে নিরাপত্তা নিশ্চিত করতে সাহায্য করে।
Flask-এ ফাইল আপলোড করার জন্য request.files ব্যবহার করা হয় এবং ফাইলের বৈধতা যাচাই করার জন্য Werkzeug বা নিজস্ব কাস্টম লজিক ব্যবহার করা যায়। Flask-এর মাধ্যমে একাধিক ফাইল আপলোড করা এবং সেগুলোর ভ্যালিডেশন করতে পারবেন খুব সহজে।
১. Multiple File Upload (একাধিক ফাইল আপলোড)
Flask-এ একাধিক ফাইল আপলোড করার জন্য ফর্মে multiple অ্যাট্রিবিউট যুক্ত করতে হবে এবং Flask অ্যাপে request.files ব্যবহার করে আপলোড করা ফাইলগুলোর অ্যাক্সেস করতে হবে।
উদাহরণ:
from flask import Flask, request
app = Flask(__name__)
@app.route("/upload", methods=["GET", "POST"])
def upload_files():
if request.method == "POST":
files = request.files.getlist('files') # একাধিক ফাইল নির্বাচন করা
for file in files:
file.save(f'./uploads/{file.filename}') # প্রতিটি ফাইল সেভ করা
return f"{len(files)} ফাইল সফলভাবে আপলোড হয়েছে!"
return '''
<form method="post" enctype="multipart/form-data">
ফাইল নির্বাচন করুন: <input type="file" name="files" multiple><br>
<input type="submit" value="আপলোড">
</form>
'''
if __name__ == "__main__":
app.run(debug=True)
এখানে:
request.files.getlist('files'): এটি ফর্মেmultipleঅ্যাট্রিবিউট সহ একাধিক ফাইল নির্বাচন করতে সহায়ক।file.save(): প্রতিটি ফাইলকে সিস্টেমে নির্দিষ্ট অবস্থানে সেভ করা হচ্ছে।
এখন, আপনি ফর্ম ব্যবহার করে একাধিক ফাইল নির্বাচন করতে পারেন এবং POST রিকোয়েস্ট সাবমিট করলে সেই ফাইলগুলো সেভ হবে।
২. File Validation (ফাইল ভ্যালিডেশন)
ফাইল আপলোড করার আগে আপনি তার বৈধতা যাচাই করতে পারেন, যেমন ফাইলের ধরন (ফাইল এক্সটেনশন), ফাইলের আকার ইত্যাদি যাচাই করতে পারেন। Flask-এ ফাইল ভ্যালিডেশন করার জন্য আপনি নিম্নলিখিত বিষয়গুলো পরীক্ষা করতে পারেন:
- ফাইলের এক্সটেনশন
- ফাইলের আকার
- ফাইলের নাম (সিদ্ধান্ত গ্রহণযোগ্য নাম)
উদাহরণ:
from flask import Flask, request
import os
app = Flask(__name__)
# নির্দিষ্ট ফাইল এক্সটেনশন এবং আকার নির্ধারণ
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
MAX_CONTENT_LENGTH = 16 * 1024 * 1024 # 16 MB পর্যন্ত ফাইল আপলোড
# ফাইল এক্সটেনশন যাচাই করার ফাংশন
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route("/upload", methods=["GET", "POST"])
def upload_files():
if request.method == "POST":
files = request.files.getlist('files')
for file in files:
# ফাইলের নাম যাচাই
if file.filename == '':
return "ফাইলের নাম দেওয়া হয়নি", 400
# ফাইলের বৈধতা যাচাই
if file and allowed_file(file.filename):
# ফাইল সাইজ যাচাই
if len(file.read()) > MAX_CONTENT_LENGTH:
return "ফাইলের আকার খুব বড়", 400
file.seek(0) # ফাইলের পয়েন্টার ফিরে আনা
# ফাইল সেভ করা
file.save(os.path.join('./uploads', file.filename))
else:
return "অবৈধ ফাইল ফরম্যাট", 400
return f"{len(files)} ফাইল সফলভাবে আপলোড হয়েছে!"
return '''
<form method="post" enctype="multipart/form-data">
ফাইল নির্বাচন করুন: <input type="file" name="files" multiple><br>
<input type="submit" value="আপলোড">
</form>
'''
if __name__ == "__main__":
app.run(debug=True)
এখানে:
allowed_file(): এটি ফাইলের এক্সটেনশন যাচাই করে। শুধুমাত্র অনুমোদিত এক্সটেনশন (যেমনpng,jpg,jpeg,gif) এর ফাইল আপলোড করা যাবে।MAX_CONTENT_LENGTH: এটি আপলোড করা ফাইলের সর্বাধিক আকার নির্ধারণ করে (এখানে 16 MB)। আপনি যদি বড় ফাইল আপলোড করার চেষ্টা করেন, তাহলে এটি413 Request Entity Too Largeএর মতো একটি ত্রুটি ফিরিয়ে দিবে।file.filename == '': ফাইল নাম না দেওয়া হলে একটি ত্রুটি ফেরত দেবে।
ইউজার ইন্টারফেস:
- ফর্মের মাধ্যমে একাধিক ফাইল নির্বাচন করা যাবে।
- আপলোডের পর, আপনি ফাইলের বৈধতা যাচাই করে সেগুলো সেভ করতে পারবেন।
৩. ফাইল সেভিংয়ের নিরাপত্তা নিশ্চিত করা
ফাইল সেভ করার সময় কিছু নিরাপত্তা ঝুঁকি থাকে, যেমন ফাইলের নামের মাধ্যমে ম্যালওয়্যার চালানোর সুযোগ। সেজন্য, ফাইল সেভ করার আগে কিছু নিরাপত্তা প্রক্রিয়া অনুসরণ করা উচিত:
- ফাইল নাম পরিস্কার (Sanitize File Name): ফাইল নামটি পরিস্কার করুন এবং এক্সটেনশন চেক করুন।
- ফাইলের নতুন নাম দেওয়া: ফাইলের আসল নামের পরিবর্তে নতুন নাম দিতে পারেন যাতে কোন ধরনের ফাইল ইঞ্জেকশন আক্রমণ এড়ানো যায়।
from werkzeug.utils import secure_filename
import uuid
@app.route("/upload", methods=["GET", "POST"])
def upload_files():
if request.method == "POST":
files = request.files.getlist('files')
for file in files:
if file and allowed_file(file.filename):
# ফাইল নাম স্যানিটাইজ
filename = secure_filename(file.filename)
# নতুন ইউনিক নাম প্রদান
filename = f"{uuid.uuid4().hex}_{filename}"
file.save(os.path.join('./uploads', filename))
return f"{len(files)} ফাইল সফলভাবে আপলোড হয়েছে!"
return '''
<form method="post" enctype="multipart/form-data">
ফাইল নির্বাচন করুন: <input type="file" name="files" multiple><br>
<input type="submit" value="আপলোড">
</form>
'''
এখানে:
secure_filename(): এটি ফাইলের নাম স্যানিটাইজ করে, যেমন এক্সট্রা ক্যারেক্টারগুলো মুছে দেয়, যা নিরাপত্তার জন্য গুরুত্বপূর্ণ।uuid.uuid4().hex: ইউনিক ফাইল নামের জন্য UUID ব্যবহার করা হয়েছে যাতে একই নামের ফাইলের সাথে সংঘর্ষ না হয়।
Flask-এ Multiple File Upload এবং File Validation হ্যান্ডলিং খুবই সহজ এবং কার্যকর। Flask-এ একাধিক ফাইল আপলোড করার জন্য request.files.getlist() ব্যবহার করা হয়, এবং ফাইলের বৈধতা যাচাই করার জন্য এক্সটেনশন চেক, সাইজ চেক এবং নাম স্যানিটাইজ করার মতো বিভিন্ন পদ্ধতি ব্যবহৃত হয়। ফাইল সেভ করার সময় নিরাপত্তা ঝুঁকি এড়াতে সঠিক যাচাই-বাছাই প্রক্রিয়া গুরুত্বপূর্ণ।
Read more