我在后端处理了一个 FastAPI / Starlette 表单,其中包含一个捕获数据的函数。
用户上传一个文件,当它保存在服务器(或我的本地机器上)时,页面崩溃,我必须等待几十秒才能刷新。
/upload 页面上的 HTML 表单:
<form action="/upload" method="post" enctype="multipart/form-data">
<div class="form-group">
<input type="file" class="form-control-file" name='upload_file' id="upload_file">
<button id="upload" type='submit' class="btn btn-primary">Upload</button>
</form>
Python后端:
@app.post("/upload")
async def handle_form(request: Request,
upload_file: UploadFile = File(...)):
Path("/app/uploads").mkdir(parents=True, exist_ok=True)
with open(f"app/uploads/{upload_file.filename}", "wb+") as file_object:
file_object.write(upload_file.file.read())
return templates.TemplateResponse('upload.html', context={'request': request})
当我点击我的上传按钮时,该文件需要几秒钟/几分钟才能在我的后端,在正确的目录 ( app/uploads
) 中创建。当它这样做时,在浏览器上,页面停止响应并被替换为:
这是一个 Edge 屏幕截图,带有一条消息,上面写着“抱歉,无法访问此页面”。
当然,其他浏览器,尤其是基于 Chromium 的浏览器,具有完全相同的行为。
我必须等待几分钟才能刷新页面并查看它是否有效。
我能做些什么来规避这种情况?
如何等到文件上传完成后再刷新 UI?