多个文件上传 - django

时间:2017-04-29 09:23:04

标签: python html django

我将多个文件上传到django,当我保存文件时,只保存了一个文件。 执行示例:

------------------------------------ start files ------------------------
<MultiValueDict: {u'patientFiles': [<InMemoryUploadedFile: Registro VFC JOSE DE LA CRUZ_16_03_2015.txt (text/plain)>, <InMemoryUploadedFile: JDTD datos vfc_27_04_2015.txt (text/plain)>]}>
    *-1-*Registro VFC JOSE DE LA CRUZ_16_03_2015.txt
    *-2-*<django.core.files.storage.FileSystemStorage object at 0xaf731aac>
    *-1-*JDTD datos vfc_27_04_2015.txt
    *-2-*<django.core.files.storage.FileSystemStorage object at 0xaf731e4c>
    *-3-*JDTD datos vfc_27_04_2015.txt
    *-4-*JDTD%20datos%20vfc_27_04_2015.txt
    --------------------------------------------------------------------------

如何看到它一次变为3点和4点并且它不会保存第一个文件。 你有什么想法吗?

谢谢,接下来是代码。

这是django-server代码:

def startFiles(self,request):
    print colored("----------------- start files -----------------------",'blue')
    print colored(request.FILES,'blue')
    for afile in request.FILES.getlist('patientFiles'):
        myfile = afile
        print colored("*-1-*" + str(myfile),'blue')
        fs = FileSystemStorage()
        print colored("*-2-*" + str(fs),'blue')
        filename = fs.save(myfile.name, myfile)
        print colored("*-3-*" + str(filename),'blue')
        uploaded_file_url = fs.url(filename)
        print colored("*-4-*" + str(uploaded_file_url),'blue')
    print colored("--------------------------------------------------------------------------------",'blue')

这是HTML代码:

<form id="SuPF" class="form-group" enctype="multipart/form-data" action="/formSingupPatient" method="POST">
    <input type="file" multiple="true" name="patientFiles">
    <button type="submit" id="SubmitForm" class="btn btn-default">Submit</button>
</form>

2 个答案:

答案 0 :(得分:0)

最后我用python的文件API来保存很多文件。我用:

更改startFiles代码
def startFiles(self,request):
print colored("----------------- start files -----------------------",'blue')
print colored(request.FILES,'blue')
for afile in request.FILES.getlist('patientFiles'):
    myfile = afile
    print colored("*-1-*" + str(myfile),'blue')
    fs = FileSystemStorage()
    print colored("*-2-*" + str(fs),'blue')
    filename = settings.MEDIA_ROOT + "/" + myfile.name
    f = open(filename,'w')
    print colored(f,'blue')
    f.write(myfile.read())
    f.close()
print colored("--------------------------------------------------------------------------------",'blue')

我使用缓冲区来创建文件并保存文件。

settings.MEDIA_ROOT是保存文件的系统路径。

我希望在未来帮助你。

答案 1 :(得分:0)

上传到模型并保存在文件系统中,我使用了这个

for d in request.FILES.getlist("asd"):
        def process(f):
            with open('./media/file_' + x.name, 'wb+') as destination:
                for chunks in f.chunks():
                    destination.write(chunks)
                    obj = Details()
                    obj.xxx= './media/f_' + x.name
                    obj.type = type
                    obj.save()
        process(d)