【问题标题】:'Cannot alter upload handlers' while trying to upload file尝试上传文件时“无法更改上传处理程序”
【发布时间】:2011-07-12 15:29:03
【问题描述】:

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

上传处理完成后,您无法更改上传处理程序

代码:

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

那段代码有什么问题?

【问题讨论】:

    标签: python ajax django


    【解决方案1】:

    您必须在开始上传之前定义上传处理程序。在您可以访问 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")
    

    【讨论】:

    • @CpILL:这个答案已经在 2011 年给出,很可能是 Django 1.4 甚至 1.3
    • 是的,我想通了。 CSRF 中间件在我之前访问它。
    猜你喜欢
    • 1970-01-01
    • 2023-01-20
    • 2013-11-15
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2012-04-26
    相关资源
    最近更新 更多