开发Webhook时如何在FastAPI中通过Request对象获取文件与表单数据?
FastAPI中实现类似Flask request.files的功能
在FastAPI中,你可以直接通过Request对象读取请求中的文件和表单数据,避开UploadFile = File(...)强制校验必填字段的限制,实现和Flask中request.files相同的效果,具体实现如下:
核心代码示例
from fastapi import FastAPI, Request app = FastAPI() @app.post("/webhook") async def handle_webhook(request: Request): # 获取完整的表单数据(包含文件和普通字段) form_data = await request.form() # 提取所有文件对象,模拟Flask的request.files files = {} for key, item in form_data.items(): # 判断是否为文件对象(FastAPI的UploadFile类型) if hasattr(item, "file"): files[key] = item # 示例操作:读取某个文件的内容 if "target_file" in files: target_file = files["target_file"] file_content = await target_file.read() # 这里添加你的文件处理逻辑 # 获取普通表单字段 extra_param = form_data.get("extra_param") return {"status": "success", "received_files": list(files.keys())}
关键说明
await request.form()会解析multipart/form-data类型的请求,返回包含文件和普通字段的FormData对象,和Flask中request.form+request.files的组合效果一致。- 提取的文件对象是FastAPI的
UploadFile类型,支持read()、write()、filename等属性和方法,用法和直接声明UploadFile参数完全相同。 - 这种方式不需要预先声明文件字段名,适配第三方服务可能的动态字段传递,避免「File为必填字段」的校验错误。
内容的提问来源于stack exchange,提问作者The knight
相关产品推荐
相关产品推荐

