Je suis en train d'écrire une application django pour télécharger un répertoire de fichiers avec des formulaires.
Voici le formulaire que j'utilise et qui permet de télécharger un répertoire :
class FileFieldForm(forms.Form):
file_field = forms.FileField(widget=forms.ClearableFileInput(attrs=
{'multiple': True, 'webkitdirectory': True, 'directory': True}))
Il s'agit de la charge utile brute du poste :
------WebKitFormBoundaryPbO3HkrKGbBwgD3sd1
Content-Disposition: form-data; name="csrfmiddlewaretoken"
F575Bgl4U9dzgwePPeSW2ISZKk5c3CnRoqFasdasD0Hep6nD0LnAAObXbF92SUa96NbO2
------WebKitFormBoundaryPbO3HkrKGbBwgDsd31
Content-Disposition: form-data; name="file_field";
filename="MainDir/SubDir1/1.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryPbOasd3HkrKGbBwgD31
Content-Disposition: form-data; name="file_field";
filename="MainDir/SubDir2/2.jpg"
Content-Type: image/jpeg
Il s'agit de la vue permettant de gérer le formulaire :
class FileFieldView(FormView):
form_class = FileFieldForm
template_name = 'upload.html'
success_url = 'upload'
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
files = request.FILES.getlist('file_field')
if form.is_valid():
for f in files:
pprint("Name of file is " + f._get_name() + ' ' + f.field_name, sys.stderr)
new_file = FileModel(file=f)
new_file.save()
return self.form_valid(form)
else:
return self.form_invalid(form)
Le problème est que le nom de l'objet fichier dans django est sans nom de sous-répertoire. Je suppose que l'un des middleware qui gère la requête analyse et supprime les noms de sous-répertoires du nom de fichier. Y a-t-il un moyen d'obtenir le nom de fichier original qui contient les noms de répertoires et de sous-répertoires ?