2011-03-10 60 views
2

我試圖在django中使用uploadhandler上傳文件。但其返回錯誤'嘗試上傳文件時不能改變上傳處理程序'

def upload_form(request): 
    if request.method == 'POST': 
     outPath = '/opt/workspace/jup2/juppro/uploads/23232' 
     if not os.path.exists(outPath): 
      os.makedirs(outPath) 
     request.upload_handlers.insert(0, ProgressUploadHandler(request, outPath)) # place our custom upload in first position 
     upload_file = request.FILES.get('file', None) # start the upload 
     return HttpResponse("uploaded ok") 

什麼錯碼「之後,上傳已經被處理你不能改變的上傳處理程序」。 Plz的幫助。任何幫助將不勝感激

回答

0

你必須定義uploadhandler,然後再開始上傳。您可以訪問request.POST文件已經被上傳到內存或臨時文件的那一刻。這使得定義上傳處理程序毫無意義,因爲上傳已經完成。

Django文檔非常清楚何時定義一個自定義的uploadhandler:「你只能在訪問request.POST或request.FILES之前修改上傳處理程序 - 在上傳處理完成後更改上傳處理程序沒有任何意義開始「。如果沒有足夠的瞭解你的代碼,我只能猜測,但我認爲它應該足以修改代碼以下列:

def upload_form(request): 
    outPath = '/opt/workspace/jup2/juppro/uploads/23232' 
    if not os.path.exists(outPath): 
     os.makedirs(outPath) 
    request.upload_handlers.insert(0, ProgressUploadHandler(request, outPath)) # place our custom upload in first position 

    if request.method == 'POST':  
     upload_file = request.FILES.get('file', None) # start the upload 
     return HttpResponse("uploaded ok") 
+0

不,在Django沒有工作:(1.8 – CpILL 2016-01-07 05:33:30

+0

@CpILL:這個答案已經給出在2011年,最可能的Django 1.4甚至1.3 – marue 2016-01-09 14:52:08

+0

是的,我想通了。CSRF中間件是在我看來之前訪問它。 – CpILL 2016-01-11 21:16:22