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

Flask处理multipart/form-data表单时request.form返回空字典的解决办法

问题根源

当表单包含文件上传字段时,若HTML表单未设置enctype="multipart/form-data"属性,Flask无法正确解析POST请求中的表单数据与文件,会导致request.form返回空字典。

解决方法

1. 修改HTML表单

确保表单的method为POST,并添加enctype="multipart/form-data"属性,示例代码:

<form method="POST" action="/upload" enctype="multipart/form-data">
    <input type="text" name="sub_id" placeholder="用户ID">
    <input type="text" name="sub_first_name" placeholder="名">
    <input type="text" name="sub_last_name" placeholder="姓">
    <input type="file" name="upload_file">
    <button type="submit">提交</button>
</form>

2. 调整Flask路由处理逻辑

在路由中,依然可以通过request.form获取文本字段值,用request.files处理上传文件,示例代码:

from flask import Flask, request

app = Flask(__name__)

@app.route("/upload", methods=["POST"])
def upload():
    # 获取文本字段
    sub_id = request.form.get("sub_id")
    sub_first_name = request.form.get("sub_first_name")
    sub_last_name = request.form.get("sub_last_name")
    
    # 获取并处理上传文件
    uploaded_file = request.files.get("upload_file")
    if uploaded_file and uploaded_file.filename != "":
        # 示例:保存文件到当前目录
        uploaded_file.save(f"./{uploaded_file.filename}")
    
    return f"已接收姓:{sub_last_name},上传文件:{uploaded_file.filename if uploaded_file else '无'}"

if __name__ == "__main__":
    app.run(debug=True)
关键注意点
  • enctype="multipart/form-data"是必填项,没有它Flask无法拆分表单中的文本数据和文件数据
  • 用request.form.get()替代直接索引(如request.form["sub_last_name"]),可以避免字段未提交时触发KeyError
  • 处理上传文件时,建议校验文件名、文件类型和大小,防止恶意文件上传

内容的提问来源于stack exchange,提问作者PatrickHellman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:25:51