Advanced File Uploads
Django-তে সাধারণ ফাইল আপলোডের বাইরেও অনেক জটিল রিকোয়ারমেন্ট হ্যান্ডেল করতে হয়, যেমন মাল্টিপল ফাইল আপলোড, ইমেজ রিসাইজিং বা ক্লাউড স্টোরেজ ব্যবহার।
Multiple File Uploads
একসাথে একাধিক ফাইল আপলোড করার জন্য HTML ফর্মে multiple অ্যাট্রিবিউট ব্যবহার করতে হয় এবং ভিউতে request.FILES.getlist() মেথড ব্যবহার করতে হয়।
HTML Form:
html
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="files" multiple>
<button type="submit">Upload</button>
</form>View:
python
def upload_files(request):
if request.method == 'POST':
files = request.FILES.getlist('files')
for f in files:
handle_uploaded_file(f)
return HttpResponse("Files uploaded!")File Validation
ফাইল মডেল বা ফর্ম লেভেলে ভ্যালিডেট করা উচিত।
python
from django.core.exceptions import ValidationError
def validate_file_size(value):
filesize = value.size
if filesize > 5 * 1024 * 1024: # 5MB limit
raise ValidationError("The maximum file size that can be uploaded is 5MB")
else:
return valueImage Processing (Pillow)
ইমেজ আপলোডের পর রিসাইজ বা ফরম্যাট চেঞ্জ করার জন্য Pillow লাইব্রেরি ব্যবহার করা হয়।
Installation:
bash
pip install PillowCustom Save Method:
python
from PIL import Image
class Profile(models.Model):
image = models.ImageField(upload_to='profile_pics')
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
img = Image.open(self.image.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.image.path)Cloud Storage (AWS S3)
প্রোডাকশনে ফাইল সার্ভারে না রেখে S3 বা DigitalOcean Spaces এ রাখা বেস্ট প্র্যাকটিস। এর জন্য django-storages এবং boto3 ব্যবহার করা হয়।
Installation:
bash
pip install django-storages boto3Settings:
python
# settings.py
INSTALLED_APPS = [
# ...
'storages',
]
AWS_ACCESS_KEY_ID = 'your-access-key-id'
AWS_SECRET_ACCESS_KEY = 'your-secret-access-key'
AWS_STORAGE_BUCKET_NAME = 'your-bucket-name'
AWS_S3_REGION_NAME = 'us-east-1'
# Static and Media files configuration
STORAGES = {
"default": {
"BACKEND": "storages.backends.s3.S3Storage",
},
"staticfiles": {
"BACKEND": "storages.backends.s3.S3StaticStorage",
},
}Custom Storage Backends
যদি আপনার নির্দিষ্ট কোনো ফোল্ডার স্ট্রাকচার বা লজিক দরকার হয়, তবে Storage ক্লাস ইনহেরিট করে কাস্টম ব্যাকএন্ড তৈরি করা যায়।
python
from django.core.files.storage import Storage
class MyStorage(Storage):
def _open(self, name, mode='rb'):
# ... logic to open file ...
pass
def _save(self, name, content):
# ... logic to save file ...
return name