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

如何将Data Image URL以图片文件形式发送至Discord?遇400错误

问题解决:内存中直接发送图片到Discord Webhook

问题原因

你的代码返回400错误,是因为Discord Webhook不支持在content字段里直接传入base64格式的数据URL。要发送图片,必须使用multipart/form-data格式上传文件,这种方式可以在内存中完成处理,无需将图片保存到硬盘。

修正后的代码

import requests
import base64
from io import BytesIO

WEBHOOK_URL = "https://discord.com/api/webhooks/10304540869963366XXX/XXXXXXXXXXXXXXbiAhIF68Yt-yGBsSKlcKUsDvQdJ"

# 读取图片到内存二进制对象
with open("image.jpg", "rb") as image_file:
    image_data = image_file.read()

# 将二进制数据包装为内存文件对象,避免写入硬盘
image_buffer = BytesIO(image_data)

# 构造请求参数
payload = {
    "username": "My Bot",
    "avatar_url": "https://cdn.discordapp.com/attachments/434487340535382018/1053728327036305418/Screen_Shot_2022-12-17_at_12.40.07_PM.png"
}

# 包装内存中的图片文件
files = {
    "file": ("image.jpg", image_buffer, "image/jpeg")
}

# 发送请求,requests会自动处理multipart/form-data格式
response = requests.post(WEBHOOK_URL, data=payload, files=files)

# 验证请求结果(Discord成功时可能返回200或204)
if response.status_code in [200, 204]:
    print("图片发送成功")
else:
    print(f"发送失败,状态码: {response.status_code}")
    print(f"错误详情: {response.text}")

针对Data Image URL的处理

如果你的原始输入是Data Image URL(格式如data:image/jpeg;base64,xxxxxx),可以直接解码后存入内存对象,无需读取本地文件:

# 示例Data Image URL
data_url = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAAAAAAAD..."

# 提取并解码base64部分
base64_content = data_url.split(",")[1]
image_data = base64.b64decode(base64_content)
image_buffer = BytesIO(image_data)

# 后续上传代码与上方一致

关键提示

  • Discord的content字段有长度限制,直接传入base64数据会超出限制,这也是报错的核心原因
  • 使用multipart/form-data是Discord Webhook接受文件的标准方式,无需手动设置Content-Type,requests会自动处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:40:54