Como fazer upload de um arquivo com Django (Python) e s3?
-
11-07-2019 - |
Pergunta
Eu estou procurando uma maneira de fazer upload de um arquivo para s3. Eu estou usando Django. Atualmente, estou usando a biblioteca de python da Amazon para upload junto com o código a seguir:
Ver:
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)
Template:
<form action="/submitpicture/" method="POST">
<input type="file" id="file" name="file" />
<input type="submit" value="submit" />
</form>
No entanto, quando eu realmente tentar executá-lo eu recebo o seguinte erro:
"Key 'file' not found in <QueryDict: {}>"
#MultiValueDictKeyError
Eu realmente não ver o que estou fazendo de errado. Alguém pode me apontar na direção certa?
Edit: Só no caso de alguém maravilhas, estou pensando em adicionar alguma validação depois de obter o trabalho de upload real.
Solução
Você terá que fornecer o atributo enctype do elemento FORM (eu fui mordido por isso antes). Por exemplo, sua marca FORM deve ser parecido:
<form action="/submitpicture/" method="POST" enctype="multipart/form-data" >
Sem o enctype, você vai encontrar-se com um request.FILES vazias.
Outras dicas
Em vez de fazer isso manualmente Gostaria de ter um olhar para o armazenamento de backend David Larlet tem escrito para Django, django-storages
Como adicionar enctype = "multipart / form-data" parece ser algo que vale a pena mencionar na secção "Carregamentos de arquivos" dos docs django ( http://docs.djangoproject.com/en/dev/topics/http/file-uploads/ ). Pensamentos?