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"。当您包含文件上传时,它不会自动默认为此。