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
相关产品推荐
相关产品推荐

