CherryPy দিয়ে ওয়েব অ্যাপ্লিকেশন তৈরির সময় ফাইল আপলোড এবং ডাউনলোড ব্যবস্থাপনা একটি গুরুত্বপূর্ণ বিষয়। CherryPy সহজে ফাইল আপলোড এবং ডাউনলোড করার জন্য সমর্থন প্রদান করে। এখানে আমরা দেখব কিভাবে CherryPy তে ফাইল আপলোড এবং ডাউনলোড পরিচালনা করা যায়।
CherryPy তে ফাইল আপলোড
CherryPy তে ফাইল আপলোড করতে cherrypy.request.params এবং cherrypy.request.files ব্যবহার করা হয়। ফাইল আপলোডের জন্য একটি HTML ফর্ম তৈরি করতে হবে যেখানে enctype="multipart/form-data" ব্যবহৃত হবে।
উদাহরণ: ফাইল আপলোড
- HTML ফর্ম (upload.html):
<!DOCTYPE html>
<html>
<head>
<title>ফাইল আপলোড</title>
</head>
<body>
<h1>ফাইল আপলোড ফর্ম</h1>
<form action="/upload" method="post" enctype="multipart/form-data">
<label for="file">ফাইল নির্বাচন করুন:</label>
<input type="file" name="file" id="file">
<input type="submit" value="আপলোড">
</form>
</body>
</html>
- CherryPy অ্যাপ্লিকেশন (app.py):
import cherrypy
import os
class FileUploadApp:
@cherrypy.expose
def index(self):
return open("upload.html")
@cherrypy.expose
def upload(self, file):
upload_path = "./uploads"
if not os.path.exists(upload_path):
os.makedirs(upload_path)
file_path = os.path.join(upload_path, file.filename)
with open(file_path, 'wb') as f:
f.write(file.file.read())
return f"ফাইল '{file.filename}' সফলভাবে আপলোড করা হয়েছে!"
if __name__ == '__main__':
cherrypy.quickstart(FileUploadApp())
কোড ব্যাখ্যা:
- HTML ফর্ম: ব্যবহারকারীর কাছ থেকে ফাইল নিতে একটি ফর্ম তৈরি করা হয়েছে।
- CherryPy অ্যাপ: ফাইলটি
uploadমেথডে প্রসেস করা হচ্ছে, যেখানে ফাইলটিকেuploadsফোল্ডারে সংরক্ষণ করা হচ্ছে। file.filename: আপলোড করা ফাইলের নাম।file.file.read(): ফাইলটি পড়েuploadsফোল্ডারে সংরক্ষণ করা হচ্ছে।
CherryPy তে ফাইল ডাউনলোড
CherryPy তে ফাইল ডাউনলোড করতে, আপনি cherrypy.lib.static.serve_file() ব্যবহার করতে পারেন, যা ফাইলটি সরাসরি সার্ভার থেকে ক্লায়েন্টে পাঠায়।
উদাহরণ: ফাইল ডাউনলোড
- CherryPy অ্যাপ্লিকেশন (app.py):
import cherrypy
import os
from cherrypy.lib.static import serve_file
class FileDownloadApp:
@cherrypy.expose
def index(self):
return '''<html>
<body>
<h2>ফাইল ডাউনলোড</h2>
<a href="/download/sample.txt">sample.txt ডাউনলোড করুন</a>
</body>
</html>'''
@cherrypy.expose
def download(self, filename):
file_path = os.path.join('./downloads', filename)
if os.path.exists(file_path):
return serve_file(file_path, "application/octet-stream", download=True)
else:
return "ফাইলটি পাওয়া যায়নি।"
if __name__ == '__main__':
cherrypy.quickstart(FileDownloadApp())
- ফাইল
downloads/ফোল্ডারে সেভ করুন:
project/
│
├── app.py
└── downloads/
└── sample.txt
কোড ব্যাখ্যা:
/download/sample.txtURL এ ক্লিক করলে,sample.txtফাইলটি ডাউনলোড হবে।serve_file(): এটি ফাইলটি ডাউনলোড করার জন্য CherryPy এর বিল্ট-ইন টুল।download=True: এটি ফাইলটিকে ডাউনলোডের জন্য প্রস্তুত করে।
কাস্টম ফাইল আপলোড এবং ডাউনলোড সেটিংস
ফাইল আপলোড এবং ডাউনলোডের জন্য CherryPy তে কিছু কাস্টম সেটিংস করা যেতে পারে, যেমন:
- ফাইল সাইজ লিমিট: ফাইল আপলোডের আকার সীমিত করা।
- ফাইল টাইপ চেক: শুধুমাত্র নির্দিষ্ট ফাইল টাইপ (যেমন:
.jpg,.png) আপলোড করার অনুমতি দেওয়া।
উদাহরণ: ফাইল সাইজ লিমিট এবং ফাইল টাইপ চেক
import cherrypy
import os
class FileUploadApp:
@cherrypy.expose
def index(self):
return '''<html>
<body>
<h2>ফাইল আপলোড</h2>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="আপলোড" />
</form>
</body>
</html>'''
@cherrypy.expose
def upload(self, file):
max_file_size = 1048576 # 1MB
allowed_extensions = ['jpg', 'jpeg', 'png']
# ফাইল সাইজ চেক
if file.length > max_file_size:
return "ফাইলটি খুব বড়, সর্বোচ্চ সাইজ 1MB।"
# ফাইল এক্সটেনশন চেক
file_extension = file.filename.split('.')[-1].lower()
if file_extension not in allowed_extensions:
return f"এই ধরনের ফাইল ({file_extension}) আপলোড করা যাবে না।"
upload_path = "./uploads"
if not os.path.exists(upload_path):
os.makedirs(upload_path)
file_path = os.path.join(upload_path, file.filename)
with open(file_path, 'wb') as f:
f.write(file.file.read())
return f"ফাইল '{file.filename}' সফলভাবে আপলোড করা হয়েছে!"
if __name__ == '__main__':
cherrypy.quickstart(FileUploadApp())
কোড ব্যাখ্যা:
- ফাইল সাইজ চেক: আপলোড হওয়া ফাইলের সাইজ চেক করে যদি তা 1MB এর বেশি হয় তবে একটি মেসেজ দেখানো হবে।
- ফাইল এক্সটেনশন চেক: শুধুমাত্র
.jpg,.jpeg,.pngধরনের ফাইল আপলোড করা যাবে।
CherryPy তে ফাইল আপলোড এবং ডাউনলোড খুবই সহজ এবং কার্যকরী। CherryPy এর cherrypy.request.files এবং cherrypy.lib.static.serve_file() ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশনে ফাইল আপলোড এবং ডাউনলোড পরিচালনা করতে পারবেন। এছাড়াও, CherryPy কাস্টম কনফিগারেশন সেটিংস দিয়ে ফাইল সাইজ এবং টাইপ সীমাবদ্ধতা, ফাইল স্টোরেজ ব্যবস্থা, এবং অন্যান্য নিরাপত্তা ফিচার যোগ করা সম্ভব।
Read more