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

FastAPI WebSocket传输Base64图片遇PayloadTooBig问题求助

解决WebSocket传输Base64图片时PayloadTooBig报错问题

问题原因

websockets.exceptions.PayloadTooBig 报错是因为websockets库默认单条消息大小限制(默认1MB)不足以容纳Base64编码后的图片数据——Base64编码会让原文件体积增大约33%,普通图片编码后很容易超过默认限制。

解决方案

通过调整WebSocket连接的max_size参数,放宽单条消息的大小限制即可解决。

1. 修改ConnectionManager的connect方法

在接受WebSocket连接时,指定更大的max_size值(单位:字节),根据你的图片实际大小调整:

class ConnectionManager:
    def __init__(self):
        self.active_connections: List[WebSocket] = []

    async def connect(self, websocket: WebSocket):
        # 设置最大接收消息大小为10MB(可根据需求调整,比如20*1024*1024=20MB)
        await websocket.accept(max_size=10 * 1024 * 1024)
        self.active_connections.append(websocket)

    # 其他方法保持不变...

2. 全局设置服务器的max_size(可选)

如果希望所有WebSocket连接都使用统一的大小限制,可以在创建WebSocket服务器时直接指定max_size参数:

import asyncio
import websockets

async def your_handler(websocket):
    await manager.connect(websocket)
    # 后续逻辑...

start_server = websockets.serve(your_handler, host="0.0.0.0", port=8000, max_size=10*1024*1024)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

3. 发送大消息时的额外设置(如果需要)

如果后端需要发送超过默认大小的消息,调用send_text或send_json时也可以指定max_size:

async def send_personal_message(self, message: str, websocket: WebSocket):
    await websocket.send_text(message, max_size=10 * 1024 * 1024)

注意事项

  • max_size的取值要根据实际场景调整,避免设置过大导致内存占用过高。
  • 如果图片体积过大(比如几十MB),建议考虑分片传输(将Base64数据拆分成多个小消息发送,后端拼接),这种方式更节省内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:21:57