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