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

通过POST请求向Flask端点发送图片与变量数据失败求助

解决Flask端点同时接收图片和变量的问题

问题根源分析

你最初遇到的AttributeError: 'int' object has no attribute 'read',是因为把普通整数变量var:0放到了files字典里——requests库会把files参数里的所有值都当作文件对象处理,尝试调用它们的read()方法,而整数类型显然没有这个方法,所以触发了报错。

后来改用json方式发送的尝试,又出现TypeError: Object of type BufferedReader is not JSON serializable,这是因为JSON无法序列化文件流对象(open(fl, 'rb')返回的BufferedReader),这种方式本身就不适合传输文件。

正确的解决方案

其实你只需要把文件放在files参数,普通变量放在data参数里分开传递,requests会自动把请求格式处理成multipart/form-data(和你用Postman发送的格式完全一致),完美匹配你现有的Flask接收代码。

修正后的发送代码

import requests

# 用with语句安全管理文件流
with open(fl, 'rb') as image_file:
    # 单独定义文件参数
    files = {'image': image_file}
    # 单独定义普通表单参数
    data = {'var': 0}
    # 分别传入files和data参数发送请求
    res = requests.post(url, files=files, data=data)

为什么这能行?

  • files参数专门用来传递文件流,requests会自动处理文件的编码和传输逻辑
  • data参数用来传递普通表单字段,对应Flask端的request.form
  • 这种方式和Postman发送文件+表单参数的逻辑完全一致,所以能正常工作

验证你的接收端代码

你现有的Flask端点代码不需要任何修改,因为它已经正确处理了文件和表单参数:

from flask import request
import numpy as np
import cv2 as cv

@app.route('/your-endpoint', methods=['POST'])
def handle_request():
    file = request.files['image']
    f1 = file.read()
    f2 = np.fromstring(f1, np.uint8)
    f3 = cv.imdecode(f2, cv.IMREAD_COLOR)
    var = int(request.form.get('var'))
    # 后续处理逻辑...
    return "Success"

这样就能同时接收图片和整数变量,不会再出现任何错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:02:51