2013-08-16 102 views
0

我正在爲網站編寫一個簡單的文件上傳器。用戶看到的一種形式:在Django中上傳圖像

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

當我嘗試這個功能的時候,我會永遠得到一個異常:

IO錯誤在/ user_profileform/

[錯誤21]是一個目錄: '/家庭/ ghrix/ghrixbidding /媒體/圖片/'

回答

1

您正試圖打開settings.MEDIA_ROOT這是目錄。

+0

當我嘗試這個目的地=打開('/ home/ghrix/ghrixbidding /靜態/媒體','wb +')比它將顯示: - IOError at/user_profileform/[Errno 21]是一個目錄:'/ home/ghrix/ghrixbidding/static/- user2644708 –

+0

謝謝,我做到了:) –

1

因爲settings.MEDIA_ROOT是目錄。您需要爲句柄提供文件名。 最好使用帶有FileField的Model,因爲它會自動在介質中生成唯一的文件名。它在https://docs.djangoproject.com/en/1.5/topics/http/file-uploads/中有描述

+0

媒體根在settings.py MEDIA_ROOT = '/家/ ghrix/ghrixbidding /媒體/圖像/' –

+0

當我嘗試此 目的地=開放('/家庭/ ghrix/ghrixbidding /靜態/媒體定義」, 'WB +') 比它會顯示: - IO錯誤在/ user_profileform/ [錯誤21]是一個目錄: '/家庭/ ghrix/ghrixbidding /靜態/媒體' –