如何使用C# Discord.Net库将字节数组图片嵌入Discord Rich Embed
实现方案
核心逻辑是先把字节数组转为内存流作为附件发送,再在Embed中引用该附件的本地占位路径,无需上传到外部图床,具体步骤如下:
- 将从数据库取出的PNG字节数组包装为
MemoryStream - 构造
FileAttachment对象关联该流,指定后缀为.png的自定义文件名 - 构造Embed时,图片的URL填写
attachment://[你刚才指定的文件名],注意文件名要和附件的文件名完全匹配 - 调用频道的
SendFileAsync方法,同时传入附件和构建好的Embed对象
完整代码示例
using Discord; using Discord.Commands; using System.IO; // 此处替换为你自己从数据库读取png字节数组的逻辑 byte[] pngBytes = GetPngFromDatabase(); // 把字节数组包装为内存流 using var imageStream = new MemoryStream(pngBytes); // 构造附件,指定文件名,后续Embed引用要和该文件名完全一致 var attachment = new FileAttachment(imageStream, "db_preview.png"); // 构建Rich Embed var embedBuilder = new EmbedBuilder() .WithTitle("数据库图片预览") .WithDescription("以下为从数据库加载的PNG资源") .WithImageUrl("attachment://db_preview.png") .WithColor(Color.Green); // 发送带Embed的消息 await Context.Channel.SendFileAsync(attachment, embed: embedBuilder.Build());
注意事项
- 不要提前释放
MemoryStream,SendFileAsync执行完成前流需要保持可访问状态,示例中使用的using语法会在方法执行完成后自动释放,符合要求 - 单张图片大小不能超过Discord的附件大小限制,普通服务器默认限制为8MB,有Nitro加成的服务器上限会更高
- 如果图片显示裂图,优先检查附件文件名和
attachment://后面的文件名是否完全匹配,包括大小写和后缀
内容的提问来源于stack exchange,提问作者NotNameless
相关产品推荐
相关产品推荐

