Загрузка файлов в Amazon S3 и другие поля на локальный сервер с использованием Django - PullRequest
0 голосов
/ 26 декабря 2011

Я пишу проект в Django, который имеет загруженные пользователем изображения, связанные с продуктами, поэтому моя модель продукта выглядит примерно так:

class Product(models.Model):
    name = models.CharField(max_length=128)
    description = models.CharField(max_length=255)
    owner = models.ForeighKey(User)
    image = models.ImageField()

Я хотел бы хранить изображения на Amazon S3, так какдовольно дешево и быстро.Я, как и другие, хотел бы избежать накладных расходов по загрузке файла на мой сервер, а затем на S3.Есть некоторый пример кода, объясняющий, как загрузить файл непосредственно в S3 из клиентского браузера.

Проблема, которую я вижу (и я пока не нашел решения) состоит в том, что у меня нет только изображения для загрузки.Мой объект (продукт) также имеет другие поля, такие как имя, описание и так далее.Все примеры, которые я видел, используют одну форму только для изображения.Я хотел бы иметь одну HTML-форму (с изображением, именем и т. Д.) Для пользователя, и как только пользователь нажмет «отправить», я смогу сохранить данные в amazon S3, а затем другую информацию (имя и т. Д.).on), в моей локальной базе данных.

В соответствии с изображением в http://docs.amazonwebservices.com/AmazonS3/latest/dev/UsingHTTPPOST.html, используя метод POST, можно отправлять данные с клиента на amazon S3 и мой веб-сервер.Теперь ясно, могут ли обе ситуации быть включены в одну и ту же страницу (одна и та же HTML-форма).

Согласно Amazon Docs, можно загрузить файл и установить ULR перенаправления, когда загрузка будет успешной.

1) Можно ли загрузить изображение на URL-адрес, а затем перенаправить его на мой веб-сервер для хранения остальной информации?Сохраняет ли перенаправление данные POST (имя, описание и т. Д.)?Как я могу получить доступ к имени файла, хранящегося в S3?

2) Есть ли другой способ достижения моей цели (кроме моего варианта № 1)?

Заранее спасибо

1 Ответ

1 голос
/ 26 декабря 2011

Оформить заказ на django-хранилища (http://code.welldev.org/django-storages/) он делает именно то, что вам нужно. И вам не нужно заботиться о множественных формах / перенаправлениях и т. Д., Он заменит бэкэнд для хранения файлов по умолчанию и просто отправит файлы в корзину Amazon 3.

Он поддерживает несколько видов хранилищ и S3 в одном из них, я уже использовал для нескольких проектов, и его действительно легко подключить.

Поскольку документы кажутся довольно мертвыми, вотмои конфигурации:

settings.py

DEFAULT_FILE_STORAGE = "storages.backends.s3boto.S3BotoStorage"
AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''
AWS_STORAGE_BUCKET_NAME = ''

и, конечно, вам нужно установить django-хранилища

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...