[Django]-Multiple files upload using same input name in django

81πŸ‘

βœ…

for f in request.FILES.getlist('file'):
    # do something with the file f...

EDIT: I know this was an old answer, but I came across it just now and have edited the answer to actually be correct. It was previously suggesting that you could iterate directly over request.FILES['file']. To access all items in a MultiValueDict, you use .getlist('file'). Using just ['file'] will only return the last data value it finds for that key.

πŸ‘€Justin Voss

12πŸ‘

Given your url points to envia you could manage multiple files like this:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from django.http import HttpResponseRedirect

def envia(request):
    for f in request.FILES.getlist('file'):
        handle_uploaded_file(f)
    return HttpResponseRedirect('/bulk/')

def handle_uploaded_file(f):
    destination = open('/tmp/upload/%s'%f.name, 'wb+')
    for chunk in f.chunks():
        destination.write(chunk)
    destination.close()
πŸ‘€user191104

1πŸ‘

I dont think all three files will be under the single request.FILES['file'] object. request.FILES['file'] is likely to have either the 1st file or the last file from that list.

You need to uniquely name the input elements like so:

<input type=file name="file1">
<input type=file name="file2">
<input type=file name="file3">

..for example.

EDIT: Justin’s answer is better!

πŸ‘€Matt Kocaj

0πŸ‘

This code is the example

    for f in request.FILES.getlist('myfile[]'):
        if request.method == 'POST' and f:
            myfile = f
            filesystem = FileSystemStorage()
            filename = filesystem.save(myfile.name, myfile)
πŸ‘€Ali Noori

Leave a comment