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