Как загрузить файл с помощью django (python) и s3?
-
11-07-2019 - |
Вопрос
Я ищу способ загрузить файл в s3.Я использую django.В настоящее время я использую библиотеку python от Amazon для загрузки вместе со следующим кодом:
Вид:
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
Я действительно не вижу, что я делаю не так.Кто-нибудь может указать мне правильное направление?
Редактировать:На всякий случай, если кому-то интересно, я планирую добавить некоторую проверку после того, как я получу фактическую загрузку.
Решение
Вам нужно будет предоставить атрибут enctype элементу ФОРМЫ (я уже сталкивался с этим раньше).Например, ваш тег ФОРМЫ должен выглядеть следующим образом:
<form action="/submitpicture/" method="POST" enctype="multipart/form-data" >
Без enctype вы окажетесь с пустым запросом.Файлы.
Другие советы
Вместо того чтобы делать это вручную, я бы взглянул на серверную часть хранилища, которую Дэвид Ларлет написал для Django, django-хранилища
Добавление enctype="multipart /form-data" кажется чем-то, что стоит упомянуть в разделе "Загрузка файлов" документации django (http://docs.djangoproject.com/en/dev/topics/http/file-uploads/).Мысли?