Starlette FormData 只提供文件名,不提供实际文件
Starlette FormData only provides names of files but not actual files
正在尝试使用 FastAPI 通过动态 HTML 表单上传多个文件。
服务器端,表单可以通过(类型 starlette.datastructures.FormData
),但文件无法通过。我只能看到文件名作为字符串。
根据 docs,如果我尝试:
@app.post("/modules/function")
async def function(request: Request):
form = await request.form()
filename = form["upload_file"].filename
contents = await form["upload_file"].read()
第 4 行 'str' object has no attribute 'read'
失败。
根据文档,form["upload_file"]
应该是 starlette.datastructures.UploadFile
类型,但我得到的是 str
类型。
看似明显的解决方案是在路径中声明文件,但由于表单是动态的,我无法判断每次有多少文件,所以我需要能够从 FormData
.
有什么指点吗?
找到了。简单的错误。在 html 表单标签中包含 enctype="multipart/form-data"
。当您包含文件上传时,它不会自动默认为此。
正在尝试使用 FastAPI 通过动态 HTML 表单上传多个文件。
服务器端,表单可以通过(类型 starlette.datastructures.FormData
),但文件无法通过。我只能看到文件名作为字符串。
根据 docs,如果我尝试:
@app.post("/modules/function")
async def function(request: Request):
form = await request.form()
filename = form["upload_file"].filename
contents = await form["upload_file"].read()
第 4 行 'str' object has no attribute 'read'
失败。
根据文档,form["upload_file"]
应该是 starlette.datastructures.UploadFile
类型,但我得到的是 str
类型。
看似明显的解决方案是在路径中声明文件,但由于表单是动态的,我无法判断每次有多少文件,所以我需要能够从 FormData
.
有什么指点吗?
找到了。简单的错误。在 html 表单标签中包含 enctype="multipart/form-data"
。当您包含文件上传时,它不会自动默认为此。