Загрузка больших файлов в AWS S3 Bucket с Django на Heroku без тайм-аута запроса 30s
У меня есть приложение django, которое позволяет пользователям загружать видео. Его размещали на Heroku и загруженные файлы, хранящиеся в ведомости S3.
Я использую JavaScript для прямой загрузки файлов на S3 после получения заданного запроса из приложения Django. Это связано с тайм-аутом запроса Heroku 30s.
Есть ли в любом случае, что я могу загружать большие файлы через бэкэнд Django без использования JavaScript и компрометировать пользовательский интерфейс?
Ответы
Ответ 1
Вы должны рассмотреть некоторые из нижеприведенных пунктов для решения вашей проблемы.
- Почему ваши файлы не должны появляться на вашем django-сервере, а затем перейдите на страницу s3: Отправка файлов на сервер django, а отправка их на s3 - это просто трата вычислительной мощности и пропускной способности. Далее следует, что следует отправлять файлы на сервер django, когда вы можете напрямую отправлять их в хранилище s3.
- Как вы можете загружать файлы на s3 без ущерба для UX: отправка файлов на сервер django, конечно же, не является вариантом, поэтому вам придется обрабатывать это на своей стороне интерфейса. Но передняя сторона имеет свои ограничения, такие как ограниченная память. Он не сможет обрабатывать очень большой файл, потому что все загружается в оперативную память, а в браузере в конечном итоге заканчивается память, если у него очень большой файл. Я бы предположил, что вы используете что-то вроде dropzone.js. Это не решит проблему памяти, но, безусловно, может обеспечить хороший UX пользователю, например, показывать индикаторы выполнения, количество файлов и т.д.
Ответ 2
Точки в другом ответе действительны. Короткий ответ на вопрос "Есть ли в любом случае, что я могу загружать большие файлы через бэкэнд Django без использования JavaScript", "не будет без переключения из Heroku".
Имейте в виду, что любые данные, передаваемые вашим динамометрам, проходят через сетку маршрутизации Heroku, что обеспечивает ограничение на 30 секунд для сохранения своих конечных ресурсов. Долгосрочные транзакции любого типа используют пропускную способность/вычислить/и т.д., Которые могут использоваться для обслуживания других запросов, поэтому Heroku применяет предел, чтобы помочь перемещать вещи по тысячам динамиков. При загрузке файла сначала вы будете ограничены пропускной способностью клиента на вашем сервере. Тогда вы будете ограничены полосой пропускания между вашими динамометрами и S3, на самом деле любая обработка, которую выполняет ваш dyno.
Чем больше файл, тем больше вероятность того, что передача данных превысит 30-секундный тайм-аут, особенно на шаге 1 для клиентов в ненадежных сетях. Создание прямого пути от клиента к S3 является разумным компромиссом.