Как обрабатывать загрузку файлов определенного типа и размера? (Ищем лучшие практики / конвенции)
У меня есть следующее определение столбца в моей модели Django
media = models.FileField()
Я хочу убедиться, что можно загружать только видеофайлы (предпочтительно в формате MP4). Кроме того, возможно ли установить максимальный размер файла, например 200 МБ? Не создаст ли такой подход дополнительной нагрузки на сервер, поскольку ему придется подтверждать тип MIME и проверять, не превышает ли размер файла установленный лимит? Я знаю, что проверки на стороне клиента сами по себе небезопасны, поскольку их можно обойти, но поможет ли csrf_token решить эту проблему на бэкенде?
Проверка типа MIME и размера файла на стороне сервера создает некоторую нагрузку, но она необходима для обеспечения безопасности. Сервер должен убедиться, что загруженные файлы соответствуют заданным критериям.
Токен csrf_token помогает защититься от атак Cross-Site Request Forgery (CSRF), но он не проверяет тип или размер файла. Он гарантирует, что запрос поступает из надежного источника, но вам все равно необходимо выполнять проверку на стороне сервера для загрузки файлов.
Вы можете использовать пользовательский валидатор django следующим образом:
validators.py
import os
from django.core.exceptions import ValidationError
def validate_video_file(file):
valid_mime_types = ['video/mp4']
valid_extensions = ['.mp4']
max_file_size = 200 * 1024 * 1024 # 200 MB
# Check MIME type
if file.content_type not in valid_mime_types:
raise ValidationError('Unsupported file type.')
# Check file extension
ext = os.path.splitext(file.name)[1]
if ext.lower() not in valid_extensions:
raise ValidationError('Unsupported file extension.')
# Check file size
if file.size > max_file_size:
raise ValidationError('File size exceeds the limit of 200 MB.')
Примените валидатор к полю вашей модели: models.py
from django.db import models
from .validators import validate_video_file
class YourModel(models.Model):
media = models.FileField(upload_to='videos/', validators=[validate_video_file])
Эта реализация дает вам возможность проверить тип MIME в дополнение к расширению файла, а также его размер.