You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:03:12