我正在尝试使用 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")
我是一名优秀的程序员,十分优秀!