Загрузка больших файлов с помощью Python / Django

Мне интересно, есть ли какие-либо последствия при загрузке файлов размером примерно 4 ГБ через веб-приложение с использованием Django / Python? Я помню, в прошлом потоковые загрузки с использованием Java были предпочтительным методом, но делает это по-прежнему сегодня или это абсолютно безопасно для этого с Django / Python?

По умолчанию Django поместит загруженные данные в память, если он меньше 2,5 МБ. Все большее количество будет записано в каталог сервера /tmp и затем скопировано в том случае, когда передача завершена. Многие параметры загрузки файлов Django могут быть настроены, подробности доступны в документации . Вы также можете настроить обработку файлов, и вы обязательно захотите это сделать.

Прежде чем мы рассмотрим любые технические ограничения, загрузка таких больших файлов в браузер даст пользователю очень плохой опыт. Отправки о том, как происходит передача, не поступает (хотя google chrome показывает статус загрузки в процентах), и нет возможности приостановить или возобновить передачу.

Вероятно, вы также столкнетесь с проблемами на сервере. Помимо чрезвычайно длительного времени, когда каждый поток будет занят обработкой потоковых данных, у вас есть время, необходимое системе для копирования полученного файла из /tmp в нужное место.

Если вы не уверены, что можете предвидеть любые проблемы, которые могут возникнуть у сервера при загрузке, я бы предположил, что это плохая идея. Довольно сложно найти какую-либо информацию об этом через google, и, похоже, много хитов, описывающих проблемы с большими файловыми загрузками.

Хотя Django технически способен получать загруженные файлы, этот большой, очень плохой пользовательский интерфейс и технические трудности означают, что это не лучший подход. Рассматривали ли вы использование специального программного обеспечения для обработки передачи файлов?

Последний ответ охватывает его. Мы регулярно загружаем 2.5mb + (но обычно не 4gb)

ссылка adamnish верна, см. этот фрагмент (из его ссылки на django docs ) относительно записи файла на диск, вместо того чтобы иметь его в памяти:

 def handle_uploaded_file(f): with open('some/file/name.txt', 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) 

Дополнительная информация о вызове «куски»: https://docs.djangoproject.com/ru/dev/ref/files/uploads/#django.core.files.uploadedfile.UploadedFile.chunks

Страница включает в себя, как установить размер «куска» и т. Д.