Come caricare un file con django (python) e s3?
-
11-07-2019 - |
Domanda
Sto cercando un modo per caricare un file su s3. Sto usando Django. Attualmente sto usando la libreria Python di Amazon per caricare insieme al seguente codice:
Visualizza:
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>
Tuttavia, quando provo effettivamente a eseguirlo, viene visualizzato il seguente errore:
"Key 'file' not found in <QueryDict: {}>"
#MultiValueDictKeyError
Non vedo davvero cosa sto facendo di sbagliato. Qualcuno può indicarmi la giusta direzione?
Modifica: nel caso qualcuno si chieda, sto pensando di aggiungere un po 'di validazione dopo che avrò funzionato il caricamento vero e proprio.
Soluzione
Dovrai fornire l'attributo enctype all'elemento FORM (ne sono stato morso prima). Ad esempio, il tag FORM dovrebbe essere simile a:
<form action="/submitpicture/" method="POST" enctype="multipart/form-data" >
Senza l'enctype, ti ritroverai con una richiesta vuota.FILES.
Altri suggerimenti
Invece di farlo manualmente, darei un'occhiata al back-end di archiviazione che David Larlet ha scritto per Django, django-depositi
Aggiunta di enctype = " multipart / form-data " sembra qualcosa che vale la pena menzionare in " Caricamenti di file " sezione dei documenti di django ( http://docs.djangoproject.com / it / dev / argomenti / http / file-uploads / ). Pensieri?