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

C# 使用SendMediaGroupAsync向Telegram Bot发送相册的类型转换问题

问题修复方案

错误原因

SendMediaGroupAsync 方法要求传入的集合元素必须是实现 IAlbumInputMedia 接口的类型实例,不能直接传入 Stream 对象。单张发送时 SendPhotoAsync 方法内部自动完成了媒体类型封装,批量发送需要手动封装。

修正后代码

// 定义集合存储媒体对象
List<IAlbumInputMedia> mediaGroup = new List<IAlbumInputMedia>();
// 定义集合持有所有流,等发送完成后统一释放
List<Stream> openedStreams = new List<Stream>();

try
{
    foreach (var formFile in files)
    {
        if (formFile.Length <= 0) continue;
        
        var stream = formFile.OpenReadStream();
        openedStreams.Add(stream);
        // 把Stream封装为实现IAlbumInputMedia接口的InputMediaPhoto对象
        mediaGroup.Add(new InputMediaPhoto(InputFile.FromStream(stream)));
    }

    // 发送媒体组,注意Telegram限制单组最多10个媒体文件,超过需自行分批发送
    await clientTg.SendMediaGroupAsync(groupId, mediaGroup);
}
finally
{
    // 发送完成后统一释放所有流资源
    foreach (var stream in openedStreams)
    {
        stream.Dispose();
    }
}

注意事项

  • 不要在循环内部用using声明流,会导致循环执行完后流就被提前释放,调用发送方法时读取不到流内容
  • 如果需要给单张照片添加说明,可以在构造InputMediaPhoto后给Caption属性赋值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:06:03