2011-03-10 62 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