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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:12:01