Как загрузить файл с django (python) и s3? - PullRequest
12 голосов
/ 26 ноября 2008

Я ищу способ загрузить файл на s3. Я использую Django. В настоящее время я использую библиотеку Amazon для Python для загрузки вместе со следующим кодом:

Вид:

def submitpicture(request):
    fuser = request.session["login"]

    copied_data = request.POST.copy()
    copied_data.update(request.FILES)
    content_type = copied_data['file'].get('content-type')
    ffile = copied_data['file']['content']
    key = '%s-%s' % (fuser, ''.join(copied_data['file']['filename'].split(' ')))
    site_s3.save_s3_data(key, ffile, content_type)

Шаблон:

<form action="/submitpicture/" method="POST">
    <input type="file" id="file" name="file" />
    <input type="submit" value="submit" />
</form>

Однако, когда я на самом деле пытаюсь запустить его, я получаю следующую ошибку:

"Key 'file' not found in <QueryDict: {}>"
#MultiValueDictKeyError

Я действительно не понимаю, что я делаю неправильно. Может ли кто-нибудь указать мне правильное направление?

Редактировать: На всякий случай, если кому-то интересно, я планирую добавить некоторую проверку после того, как я получу фактическую загрузку.

Ответы [ 3 ]

18 голосов
/ 26 ноября 2008

Вам нужно будет предоставить атрибут enctype для элемента FORM (я был укушен этим ранее). Например, ваш тег FORM должен выглядеть следующим образом:

<form action="/submitpicture/" method="POST" enctype="multipart/form-data" >

Без энтипа вы окажетесь с пустым запросом. ФАЙЛЫ.

5 голосов
/ 26 ноября 2008

Вместо того, чтобы делать это вручную, я бы взглянул на серверную часть хранилища, которую Дэвид Ларлет написал для Django, django-storagerages

2 голосов
/ 24 марта 2009

Добавление enctype = "multipart / form-data" похоже на то, что стоит упомянуть в разделе "Загрузка файлов" документации django (http://docs.djangoproject.com/en/dev/topics/http/file-uploads/). Мысли?

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