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

如何通过Discord Webhook发送Canvas图片?请求返回400错误

Discord Webhook发送Canvas图片的正确方式

Discord Webhook的Embed图片字段不支持canvas.toDataURL()生成的Data URI(Base64格式字符串),这是你收到400错误的核心原因。以下是两种可行的解决方法:

方法一:将Canvas图片作为附件上传(推荐)

通过multipart/form-data格式直接上传图片文件,再在Embed中引用附件,无需额外存储服务:

// 将Canvas转换为Blob对象
canvas.toBlob(function(blob) {
    const formData = new FormData();
    // 添加图片文件,指定文件名
    formData.append("file", blob, "canvas-image.png");
    // 封装Webhook的其他配置参数
    formData.append("payload_json", JSON.stringify({
        content: message,
        username: "AI",
        embeds: [{
            image: {
                // 引用上传的附件,格式为attachment:文件名
                url: "attachment://canvas-image.png"
            }
        }]
    }));

    const xhr = new XMLHttpRequest();
    xhr.open("POST", webHookURL, true);
    // 无需手动设置Content-Type,XHR会自动处理multipart请求的边界信息
    xhr.send(formData);
});

方法二:先上传图片到公开存储服务

如果必须使用Embed的image.url字段,需要先将Canvas图片上传到支持公开访问的存储服务,获取公开URL后再填入Embed配置:

// 假设已将Canvas图片上传到存储服务,拿到公开URL
const imageUrl = "https://example.com/your-canvas-image.png";

const xhr = new XMLHttpRequest();
xhr.open("POST", webHookURL, true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify({
    content: message,
    username: "AI",
    embeds: [{
        image: {
            url: imageUrl
        }
    }]
}));

注意事项

  • 如果Canvas绘制了跨域图片,需先设置图片的crossOrigin="anonymous",否则toBlob或toDataURL会抛出跨域错误。
  • 确保Webhook URL正确且拥有发送权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:15:36