2010-10-04 6 views
2

J'ai donc créé un formulaire qui comprend l'article suivantdans fichiers multiples, Django sans utiliser django.forms

<input type="file" name="form_file" multiple/> 

Cela indique au navigateur pour permettre à l'utilisateur de sélectionner plusieurs fichiers lors de la navigation. Le problème que je rencontre est que lorsque je lis ou écris les fichiers en cours de téléchargement, je ne vois que le dernier des fichiers, pas tous. J'étais à peu près sûr d'avoir déjà vu ça, mais je n'avais aucune chance de chercher. Voici en général ce que ma lecture ressemble

if request.FILES: 
    filename = parent_id + str(random.randrange(0,100)) 
    output_file = open(settings.PROJECT_PATH + "static/img/inventory/" + filename + ".jpg", "w") 
    output_file.write(request.FILES["form_file"].read()) 
    output_file.close() 

Maintenant, comme vous pouvez le voir, je ne suis pas une boucle à travers chaque fichier, parce que je l'ai essayé quelques façons différentes et ne peut pas sembler trouver les autres fichiers (en objets et autres)

J'ai ajouté dans ce print(request.FILES["form_file"]) et recevait seulement le dernier nom de fichier, comme prévu. Y a-t-il un truc pour accéder aux autres fichiers? Suis-je coincé avec un seul téléchargement de fichier? Merci!

Répondre

5

D'après votre élément de fichier form_file, la valeur dans request.FILES['form_file'] doit correspondre à une liste de fichiers. Ainsi, vous pouvez faire quelque chose comme:

for upfile in request.FILES.getlist('form_file'): 
    filename = upfile.name 
    # instead of "filename" specify the full path and filename of your choice here 
    fd = open(filename, 'w') 
    fd.write(upfile['content']) 
    fd.close() 

morceaux utilisant:

for upfile in request.FILES.getlist('form_file'): 
    filename = upfile.name 
    fd = open(filename, 'w+') # or 'wb+' for binary file 
    for chunk in upfile.chunks(): 
     fd.write(chunk) 
    fd.close() 
+0

J'ai essayé, mais seulement obtenu bits du fichier, ou « morceaux » Je pense qu'ils les appellent à django. C'était assez bizarre, j'ai dû passer à cette méthode pour obtenir le fichier entier. Les morceaux étaient 4kb. –

+0

Peut-être que vous pouvez essayer la recette pour gérer les morceaux mentionnés dans les docs: http://docs.djangoproject.com/en/dev/topics/http/file-uploads/#handling-uploaded-files – ars

+0

Lorsque vous traitez des morceaux, comment est-ce que je sais quand j'ai fini mon premier dossier, et commence mon deuxième? –

Questions connexes