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
相关产品推荐
相关产品推荐

