TLSharp v1.0.0.0中client.UploadFile方法不可用问题咨询
解决TLSharp v1.0.0.0中UploadFile方法不可用的问题
在TLSharp v1.0.0.0版本里,原来的UploadFile方法已经被重构移除了,而且你的代码里还有个小问题——用StreamReader读取图片/二进制文件是不合适的,它是用来处理文本流的,会导致文件内容损坏。下面是正确的实现方式:
正确的文件上传步骤
- 用
FileStream以二进制模式打开要上传的文件 - 通过
client.GetUploadClient()获取专门的上传客户端实例 - 调用
UploadFileAsync方法完成上传并获取TLInputFile对象 - 使用获取到的
TLInputFile发送图片或文件
完整代码示例
using System.IO; using TLSharp.Core; using TLSharp.Core.MTProto; // 确保你的TelegramClient已经完成初始化和登录流程 string targetFilePath = @"C:\example.jpg"; // 替换为你的文件实际路径 int targetUserId = 123456789; // 替换为要发送的目标用户ID using (var fileStream = new FileStream(targetFilePath, FileMode.Open, FileAccess.Read)) { // 获取上传客户端 var uploadClient = client.GetUploadClient(); // 执行文件上传 var inputFile = await uploadClient.UploadFileAsync( Path.GetFileName(targetFilePath), fileStream, default); // 示例:发送图片 var sendPhotoRequest = new TLRequestSendMedia { Peer = new TLInputPeerUser { UserId = targetUserId }, Media = new TLInputMediaUploadedPhoto { File = inputFile } }; await client.SendRequestAsync(sendPhotoRequest); // 如果是发送文档文件,替换成下面的Media类型: // Media = new TLInputMediaUploadedDocument // { // File = inputFile, // MimeType = "application/pdf", // 替换为对应文件的MIME类型 // Attributes = new TLVector<TLAbsDocumentAttribute> // { // new TLDocumentAttributeFilename { FileName = Path.GetFileName(targetFilePath) } // } // } }
注意事项
- 必须确保
TelegramClient实例已经完成登录验证(比如通过发送验证码、校验验证码的流程),否则上传和发送操作会失败 - 不同类型的文件需要对应不同的
TLInputMedia子类:图片用TLInputMediaUploadedPhoto,文档用TLInputMediaUploadedDocument,音频/视频同理 - 永远不要用
StreamReader处理二进制文件,一定要用FileStream或者其他二进制流读取方式,避免文件内容损坏
内容的提问来源于stack exchange,提问作者Alireza Marhamatabadi
相关产品推荐
相关产品推荐

