0

我正在为网站编写一个简单的文件上传器。用户看到一个表单:

<form action="/user_profileform/" method="POST" enctype="multipart/form-data" name="uform" id="userform">{% csrf_token %}
{{form}}

<input type="submit" value="submit" name="usubmit">
</form>

提交后,我重定向到这个函数:

@csrf_exempt
def upload_file(request):
    if request.method == 'POST':
    print "arun";
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['file'])
            return HttpResponseRedirect('/user_profileform/')
    else:
    print "ranjeet"
        form = UploadFileForm()
    return render_to_response('user_profile.html', {'form': form })

def handle_uploaded_file(f):
    destination = open(settings.MEDIA_ROOT, 'wb+')
    for chunk in f.chunks(): 
        destination.write(chunk)
    destination.close()

当我尝试这个功能时,我总是会遇到一个异常:

/user_profileform/ 处的 IOError

[Errno 21] 是一个目录:'/home/ghrix/ghrixbidding/media/images/'

4

2 回答 2

1

因为 settings.MEDIA_ROOT 是目录。您需要为句柄提供文件名。最好将 Model 与 FileField 一起使用,因为它会自动在媒体中生成唯一的文件名。它在https://docs.djangoproject.com/en/1.5/topics/http/file-uploads/中有描述

于 2013-08-16T04:15:50.697 回答
1

您正在尝试打开settings.MEDIA_ROOT哪个目录。

于 2013-08-16T04:15:53.820 回答