Загрузка большого файла из django в облачное хранилище
У меня есть приложение django на Cloud Run, и я хотел бы создать конечную точку, которая будет вызываться другим скриптом python. Эта конечная точка должна сохранять файлы в хранилище Google. Размер файла составляет 800 Мб максимум.
Когда я пытаюсь это сделать, я получаю: 413 Request Entity Too Large.
Покопавшись в интернете, я понял, что нужно использовать chunk файл. Но есть кое-что, чего я не понимаю...
Отсюда: https://github.com/django/daphne/issues/126 Я понимаю, что daphne теперь может получать большое тело в запросе. Поэтому я подумал, что, даже получая большой файл, Django умудряется разбить его на части и отправить по частям.
Мне любопытно, есть ли способ сделать то, что я хочу, кроме как сделать ручной chunk ?
На данный момент я добавил это в свои настройки:
GS_BLOB_CHUNK_SIZE = 524288
DATA_UPLOAD_MAX_MEMORY_SIZE = 26214400
FILE_UPLOAD_MAX_MEMORY_SIZE = 26214400
и я просто использую generics.ListCreateAPIView
со значением по умолчанию для обработчика загрузки файлов.
Обычно ошибка 413 означает, что превышен лимит размера запроса. Для Cloud Run квота на запросы составляет 32mb. Согласно документации, рекомендуемым способом загрузки больших файлов является предоставление подписанного URL к ведру облачного хранилища, поскольку подписанные URL можно использовать для возобновляемых загрузок:
Возобновляемые загрузки являются рекомендуемым методом для загрузки больших файлов, поскольку вам не придется перезапускать их с самого начала, если во время загрузки произойдет сбой сети.
Вы можете генерировать подписанный URL из бэкенда вашего сервера и использовать его для загрузки файла без ограничений из вашего скрипта на стороне клиента. Похоже, есть и другие связанные вопросы, в которых серверы Django в Cloud Run имеют ограничения на загрузку, и использование подписанных URLS рекомендуется для этих случаев.