Как смешать Django, Uploadify и S3Boto Серверная часть хранилища?

Предыстория

Я загружаю довольно большие файлы на 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.

Cry For Help

Кто-нибудь знает изящный способ использования FileField S3Boto в сочетании с прямой загрузкой на S3?

Иначе, как лучше всего управлять файлом S3 только на основе его URL-адреса? Включая настройку срока действия, идентификатор ключа и т. д.

Большое спасибо!

14
задан David Kay 15 March 2012 в 23:16
поделиться