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.

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top