如何不使用discord.js将base64格式图片数据提交到Discord webhook
Discord Webhook 提交Base64图片的正确实现方式
核心前提说明
Discord Webhook 不支持直接在JSON格式的请求体中提交Base64图片数据,无论是embed字段的图片地址还是其他payload属性,都无法直接识别Base64字符串,必须通过multipart/form-data格式的请求提交二进制图片文件。
1. 请求基础要求
- 请求方法必须使用
POST - 请求头的
Content-Type必须设置为multipart/form-data,不可使用application/json - 你持有的Base64图片数据需要先解码为二进制的Buffer/Blob格式,不可直接提交Base64字符串
2. 完整请求结构说明
multipart表单需要包含两个必填字段:
- 第一个字段名为
payload_json,值为JSON格式的Webhook配置,示例如下:
{ "content": "自定义的附带文本内容", "embeds": [ { "title": "嵌入消息标题", "description": "嵌入消息描述", "image": { "url": "attachment://custom_image.png" } } ] }
注意:embed中图片的url需要使用attachment://[文件名]格式,文件名必须和后续上传的文件字段的文件名完全对应
- 第二个字段名为
files[0],值为解码后的图片二进制数据,同时指定文件名为custom_image.png(文件名后缀需要和图片实际格式匹配)
3. 错误写法问题说明
直接将Base64字符串填入embed的image.url字段的写法不符合接口规则,Discord仅会识别公网可访问的HTTP/HTTPS链接,或者attachment协议的本地附件引用,不会解析Base64编码内容。
补充:Base64转二进制的常用实现
- Node.js 环境:
const imageBuffer = Buffer.from(你的Base64字符串.replace(/^data:image\/\w+;base64,/, ''), 'base64') - 浏览器/前端环境:给Base64字符串补全data URI前缀后,通过
fetchAPI转为Blob对象即可使用
内容的提问来源于stack exchange,提问作者Joe Martella
相关产品推荐
相关产品推荐

