Django的多文件上传代码

时间:2015-05-26 12:53:50

标签: python django file upload

确定。所以我在Stackoverflow中搜索了很多论坛和其他帖子后想出了以下代码。首先,我尝试使用request.FILES.get('onefile')但是只上传了一个文件,无论我在上传过程中选择了多少文件。所以我已经改变了我的代码,上传了文件名为file1,file2等的文件。以下是我的代码,但我不知道为什么这不起作用。当前没有文件正在上传,它显示以下代码中列出的错误。

upload2.html

<!DOCTYPE html>

<html>

<head>
</head>

<body>
    <form method="post" action="/index/multi/" enctype="multipart/form-data"> {% csrf_token %}
        <input type="file" name="onefile" multiple>

        <input type="submit" value="Upload">
    </form>
</body>

</html>

views.py

from django.shortcuts import render
from django.http import HttpResponse

def upload2(request):
    return render(request, "upload2.html", {})

def multi(request):
    count = 1
    for x in request.FILES.getlist('onefile'):
        print request.FILES.getlist('onefile')
        def handle_uploaded_file(f):
            with open('/home/michel/django/upload/media/file' + count, 'wb+') as destination:
                for chunk in f.chunks():
                    destination.write(chunk)
        handle_uploaded_file(x)
        count = count + 1
    return HttpResponse('Uploaded!')

urls.py

from django.conf.urls import url

from index import views

urlpatterns = [
    url(r'^upload2/$', views.upload2),
    url(r'^multi/$', views.multi),
]

错误

TypeError at /index/multi/
cannot concatenate 'str' and 'int' objects
Request Method: POST
Request URL:    http://localhost:8000/index/multi/
Django Version: 1.8.1
Exception Type: TypeError
Exception Value:    
cannot concatenate 'str' and 'int' objects
Exception Location: /home/michel/django/upload/index/views.py in handle_uploaded_file, line 32

我不确定自己是否错过了什么。如果您还有其他需要,请告诉我。提前谢谢!

2 个答案:

答案 0 :(得分:1)

它连接错误,你不能连接&#39; str&#39;和&#39; int&#39;对象。

我认为问题就在这一行

'/home/michel/django/upload/media/file' + count

解决方案

'/home/michel/django/upload/media/file' + str(count)

示例:

a = 'test'
b = 1
c = a+b
Type Error: cannot concatenate 'str' and 'int' objects

溶液:

a = 'test'
b = str(1) or '1'
c = a+b(works fine)

答案 1 :(得分:1)

  

我不确定自己是否错过了什么。

是:阅读错误消息 - 告诉您错误是什么 - ,追溯 - 告诉您错误发生的位置 - 然后重新读取您的代码。所以你有:

  

异常类型:TypeError   例外价值:
  不能连接&#39; str&#39;和&#39; int&#39;对象

这意味着您尝试连接字符串和整数(Python不允许这么明显的原因)。

  

异常位置:/home /michel/django/upload/index/views.py在handle_uploaded_file,第32行

表示错误位于第32行的/home/michel/django/upload/index/views.py中。

/home/michel/django/upload/index/views.py第32行是:

with open('/home/michel/django/upload/media/file' + count, 'wb+') as destination:

显然,'/home/michel/django/upload/media/file' + count是罪魁祸首。现在你只需要解决这个问题,要么使用count字符串,要么使用字符串格式化 - 两者都在FineManual(tm)中进行了解释。

在您了解它的同时,您可能还想阅读内置enumate(sequence)功能。