Skip to main content
 首页 » 编程设计

python之尝试上传文件时“无法更改上传处理程序”

2025年05月04日9del

我正在尝试使用 Django 中的 uploadhandler 上传文件。但它返回错误:

You cannot alter upload handlers after the upload has been processed

代码:

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

这段代码有什么问题?

请您参考如下方法:

您必须在开始上传之前定义上传处理器。在你可以访问 request.POST 的那一刻,文件已经上传到内存或临时文件中。这使得定义上传处理程序毫无意义,因为上传已经完成。

Django 文档非常清楚何时定义自定义上传处理程序:“您只能在访问 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")