File Upload এবং Download Management

Request এবং Response Handling - চেরিপাই (CherryPy) - Web Development

260

CherryPy দিয়ে ওয়েব অ্যাপ্লিকেশন তৈরির সময় ফাইল আপলোড এবং ডাউনলোড ব্যবস্থাপনা একটি গুরুত্বপূর্ণ বিষয়। CherryPy সহজে ফাইল আপলোড এবং ডাউনলোড করার জন্য সমর্থন প্রদান করে। এখানে আমরা দেখব কিভাবে CherryPy তে ফাইল আপলোড এবং ডাউনলোড পরিচালনা করা যায়।


CherryPy তে ফাইল আপলোড

CherryPy তে ফাইল আপলোড করতে cherrypy.request.params এবং cherrypy.request.files ব্যবহার করা হয়। ফাইল আপলোডের জন্য একটি HTML ফর্ম তৈরি করতে হবে যেখানে enctype="multipart/form-data" ব্যবহৃত হবে।

উদাহরণ: ফাইল আপলোড

  1. 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>
  1. 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() ব্যবহার করতে পারেন, যা ফাইলটি সরাসরি সার্ভার থেকে ক্লায়েন্টে পাঠায়।

উদাহরণ: ফাইল ডাউনলোড

  1. 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())
  1. ফাইল downloads/ ফোল্ডারে সেভ করুন:
project/
│
├── app.py
└── downloads/
    └── sample.txt

কোড ব্যাখ্যা:

  • /download/sample.txt URL এ ক্লিক করলে, sample.txt ফাইলটি ডাউনলোড হবে।
  • serve_file(): এটি ফাইলটি ডাউনলোড করার জন্য CherryPy এর বিল্ট-ইন টুল।
  • download=True: এটি ফাইলটিকে ডাউনলোডের জন্য প্রস্তুত করে।

কাস্টম ফাইল আপলোড এবং ডাউনলোড সেটিংস

ফাইল আপলোড এবং ডাউনলোডের জন্য CherryPy তে কিছু কাস্টম সেটিংস করা যেতে পারে, যেমন:

  1. ফাইল সাইজ লিমিট: ফাইল আপলোডের আকার সীমিত করা।
  2. ফাইল টাইপ চেক: শুধুমাত্র নির্দিষ্ট ফাইল টাইপ (যেমন: .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 কাস্টম কনফিগারেশন সেটিংস দিয়ে ফাইল সাইজ এবং টাইপ সীমাবদ্ধতা, ফাইল স্টোরেজ ব্যবস্থা, এবং অন্যান্য নিরাপত্তা ফিচার যোগ করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...