“上传文件时无法更改上传处理程序”

4 投票
1 回答
1599 浏览
提问于 2025-04-16 13:25

我正在尝试在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")

这段代码有什么问题呢?

1 个回答

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

撰写回答