在不使用django.forms的情况下在Django中上传多个文件

时间:2010-10-04 03:58:28

标签: python django file-upload

所以我创建了一个包含以下项目的表单

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

这告诉浏览器允许用户在浏览时选择多个文件。我遇到的问题是,当读/写正在上传的文件时,我只能看到最后一个文件,而不是所有文件。我很确定我以前见过这个,但没有运气搜索。这通常是我的阅读内容

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()

现在,你可以看到我没有循环遍历每个文件,因为我尝试了几种不同的方法,似乎无法找到其他文件(在对象等中)

我添加了print(request.FILES["form_file"])并且只获得了最后的文件名,正如预期的那样。是否有一些技巧来获取其他文件?我是否坚持使用单个文件上传?谢谢!

1 个答案:

答案 0 :(得分:6)

根据您的文件元素form_filerequest.FILES['form_file']中的值应为文件列表。所以你可以这样做:

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()

使用块:

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()