“上传文件时无法更改上传处理程序”
我正在尝试在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")