Мой сайт использует загруженные пользователем файлы изображений. Я хочу ограничить max_upload_size.
Я знаю, что вы можете установить FILE_UPLOAD_MAX_MEMORY_SIZE в settings.py. Если загружен файл больше этого размера, он записывается на диск в каталоге tmp. Это в значительной степени справляется с вещами? Могут ли огромные изображения по-прежнему влиять на производительность моего сайта?
Одна альтернатива, которую я видел, это настроить max_upload_size в apache, который (кажется) содержится в php.ini. Это звучит правильно? Желательно ли это?
Еще один шаг включает проверку атрибутов Файлового объекта. Я просмотрел этот фрагмент (http://djangosnippets.org/snippets/1303/), в котором представлен метод проверки формы.
def clean_content(self):
content = self.cleaned_data['content']
content_type = content.content_type.split('/')[0]
if content_type in settings.CONTENT_TYPES:
if content._size > settings.MAX_UPLOAD_SIZE:
raise forms.ValidationError(_('Please keep filesize under %s. Current filesize %s') % (filesizeformat(settings.MAX_UPLOAD_SIZE), filesizeformat(content._size)))
else:
raise forms.ValidationError(_('File type is not supported'))
return content
Потенциальные проблемы здесь заключаются в том, что
1) этот код применяется к FileField, а не к ImageField. Я знаю, что ImageField является подклассом FileField, поэтому я предполагаю, что это не проблема. Это правда?
2) Весь запрос HttpRequest читается перед проверкой (поэтому огромные файлы все равно будут проблемой). Кроме того, файл все еще записывается в tmp, даже если он вызывает ошибку проверки?
Наконец, вы также заметите, что эта проверка формы пытается фильтровать типы контента. Я предполагаю, что это в основном бесполезно, так как это просто просмотр расширений, которые можно легко подделать. Это тоже справедливо?
Я знаю, что этот вопрос немного бессвязен, но это сложный и распространенный вопрос (по крайней мере, для меня)