Comment télécharger un fichier avec Django (python) et s3?
-
11-07-2019 - |
Question
Je cherche un moyen de télécharger un fichier sur s3. J'utilise django. J'utilise actuellement la bibliothèque python d'Amazon pour le téléchargement avec le code suivant:
Voir:
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)
Modèle:
<form action="/submitpicture/" method="POST">
<input type="file" id="file" name="file" />
<input type="submit" value="submit" />
</form>
Cependant, lorsque j'essaie de l'exécuter, j'obtiens le message d'erreur suivant:
"Key 'file' not found in <QueryDict: {}>"
#MultiValueDictKeyError
Je ne vois vraiment pas ce que je fais mal. Est-ce que quelqu'un peut me diriger dans la bonne direction?
Edit: Juste au cas où quelqu'un se le demanderait, je prévois d’ajouter une validation une fois que le téléchargement effectif fonctionnera.
La solution
Vous devrez fournir l'attribut enctype à l'élément FORM (j'ai déjà été mordu par cela). Par exemple, votre balise FORM devrait ressembler à:
<form action="/submitpicture/" method="POST" enctype="multipart/form-data" >
Sans l’enctype, vous vous retrouverez avec une requête vide.FILES.
Autres conseils
Au lieu de le faire manuellement, je jetterai un coup d'œil au serveur de stockage que David Larlet a écrit pour Django, django-storages
Ajout de enctype = " multipart / form-data " semble être quelque chose qui mérite d'être mentionné dans la section "Fichiers téléchargés". section de la documentation django ( http://docs.djangoproject.com / fr / dev / topics / http / file-uploads / ). Des pensées?