discord.js v13中如何使用本地图片作为embed的缩略图?
问题原因
Discord Embed 仅支持 HTTP/HTTPS 协议的公网资源作为缩略图/图片地址,你直接传入本地文件路径,Discord 会自动识别为file协议,因此触发不支持的报错。
解决方案
方案1:本地文件作为消息附件绑定Embed(推荐临时展示场景)
不需要额外配置图床,直接将本地图片作为消息附件一同发送,再通过attachment://协议关联到Embed即可,示例代码如下:
const { AttachmentBuilder, EmbedBuilder } = require('discord.js'); const path = require('path'); // 生成图片绝对路径,避免相对路径寻址错误 const imgPath = path.resolve(__dirname, `images/characters/${interaction.user.id}.png`); // 构建附件对象,设置自定义文件名(避免特殊字符冲突) const charImg = new AttachmentBuilder(imgPath, { name: `char-${interaction.user.id}.png` }); // 构建Embed,缩略图地址填写 attachment:// + 刚才设置的附件文件名 const characterEmbed = new EmbedBuilder() .setTitle('角色创建成功') .setThumbnail(`attachment://char-${interaction.user.id}.png`); // 发送消息时必须同时传入附件数组 await interaction.reply({ embeds: [characterEmbed], files: [charImg] });
方案2:上传到公网存储获取HTTPS链接(推荐长期复用场景)
如果生成的角色图片需要多次使用,可以把生成的图片上传到你自己的公网存储服务,拿到可直接访问的HTTPS链接后,直接传入setThumbnail方法即可,不需要再每次发送附件。
注意事项
- 附件文件名不要包含空格、特殊符号,避免路径绑定失效
- 若使用相对路径,要确保执行代码的工作目录和图片存放目录的相对关系正确,优先使用
path.resolve生成绝对路径更稳妥
内容的提问来源于stack exchange,提问作者Tesohh
相关产品推荐
相关产品推荐

