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

使用curl向Flask上传文件时request.files无FileStorage对象怎么办

问题原因
  • 调试方式错误。request.files 是 Werkzeug 封装的 ImmutableMultiDict 类型对象,它存储的表单文件键值对存放在类的内部存储结构中,并不会暴露在实例的 __dict__ 属性里,直接打印 request.files.__dict__ 自然会输出空字典,哪怕实际已经接收到了上传文件。
  • curl 执行目录下不存在 test.dat 文件。当 curl 找不到 -F 参数指定的本地文件时,会静默跳过该参数,发送空的 POST 请求,最终出现 request.files、request.form、request.data 全为空的现象。
解决方法
  1. 先确认上传文件存在:在执行 curl 命令的终端执行 ls test.dat,如果提示文件不存在,切换到 test.dat 所在目录再执行 curl 命令,或者直接在 curl 中写文件的绝对路径,比如 curl -F onlyFile=@/home/xxx/test.dat http://192.168.1.25:5000
  2. 修改 Flask 服务的调试代码,不要访问 __dict__ 属性,直接打印 request.files 或者访问对应字段,示例修正代码如下:
from flask import Flask, request
app = Flask(__name__)

@app.route('/', methods=['POST'])
def upload_file():
    # 直接打印request.files本身,不要加__dict__
    print("接收到的文件对象:", request.files)
    # 直接取你上传的onlyFile字段
    file = request.files.get('onlyFile')
    if file:
        print("获取到上传文件,文件名:", file.filename)
    print("表单内容:", request.form)
    print("原始请求数据:", request.data)
    return ""

app.run(host='0.0.0.0', port=5000)

修改完成后重启服务,再执行curl请求即可正常获取到上传文件内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:42:02