Я загружаю довольно большие файлы на Django. Размер файла обычно составляет 10-100 МБ.
Я на Heroku, и время ожидания запроса истекает через 30 секунд.
Чтобы обойти ограничение, Heroku рекомендуетзагружать из браузера НАПРЯМУЮ на S3.
Amazon документирует это, показывая, как написать HTML-формудля выполнения загрузки.
Поскольку я работаю на Django, вместо того, чтобы писать HTML вручную, я использую django-uploadify-s3( example). Это дает мне объект SWF, завернутый в JS, который выполняет фактическую загрузку.
Эта часть работает нормально! Ура!
Проблемазаключается в разумной привязке этих данных к моей модели Django. Прямо сейчас данные возвращаются в виде простой строки URL, указывающей на местоположение файла.
Однако ранее я использовал S3 Boto из django-storagesдля управления всеми своими файлами как FileFields
, поддерживаемый восхитительным S3BotoStorageFile
.
Повторим еще раз: S3 Boto отлично работает изолированно, Uploadify отлично работает изолированно, проблема заключается в том, чтобы совместить их вместе.
Насколько я понимаю, единственный способ заполнить поле FileField
– указать какимя файла, так и содержимое файла . Когда вы загружаете файлы из браузера в Django, это не проблема, так как Django хранит содержимое файла в буфере и может делать с ним все, что захочет.Однако при прямой загрузке на S3, как и я, Django получает только имя файла и URL-адрес, а не двоичные данные, поэтому я не могу правильно заполнить FieldFile
.
Кто-нибудь знает изящный способ использования FileField S3Boto в сочетании с прямой загрузкой на S3?
Иначе, как лучше всего управлять файлом S3 только на основе его URL-адреса? Включая настройку срока действия, идентификатор ключа и т. д.
Большое спасибо!