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

Content-Type为multipart/form-data时如何从Flask请求对象一次性获取多张图片

多图片文件读取转numpy数组方案

方案1(推荐):直接通过request.files读取独立文件流

request.files原生支持多文件上传读取,不需要手动拆分字节串,操作逻辑如下:

  • 前端多文件上传使用同一个字段key,后端通过request.files.getlist(key)获取该key下所有文件对象,每个对象对应一张独立图片的字节流
  • 单文件转np.ndarray代码示例:
import io
import numpy as np
from PIL import Image

# 替换为实际的上传字段key
upload_key = "images"
np_images = []
for file_obj in request.files.getlist(upload_key):
    # 读取单个图片字节流
    img_byte = file_obj.read()
    # 字节流转PIL图像对象
    img_pil = Image.open(io.BytesIO(img_byte))
    # 转换为numpy数组
    img_np = np.array(img_pil)
    np_images.append(img_np)

方案2(仅应急使用):手动拆分合并后的字节串

如果你已经获取到了多图片拼接后的完整字节串,可通过HTTP表单边界符拆分:

  • 首先从请求头Content-Type字段提取多部分表单的边界标识
  • 用边界标识拆分字节串,过滤无效内容后提取单张图片的字节流
  • 代码示例:
import io
import numpy as np
from PIL import Image

# 提取边界标识
content_type = request.headers.get("Content-Type")
boundary = content_type.split("boundary=")[1].encode()
# 拆分合并后的字节串
all_bytes = request.files["your_key"].read()
file_parts = all_bytes.split(boundary)

np_images = []
for part in file_parts:
    # 过滤无效片段
    if b"Content-Disposition" not in part or b"image/" not in part:
        continue
    # 拆分头部信息和图片实际字节
    _, img_byte = part.split(b"\r\n\r\n", 1)
    img_byte = img_byte.rstrip(b"\r\n")
    # 转numpy数组
    img_pil = Image.open(io.BytesIO(img_byte))
    np_images.append(np.array(img_pil))

注意:手动拆分边界容易出现编码、换行符兼容问题,优先使用方案1处理多文件上传场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:45:01