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

TLSharp v1.0.0.0中client.UploadFile方法不可用问题咨询

解决TLSharp v1.0.0.0中UploadFile方法不可用的问题

在TLSharp v1.0.0.0版本里,原来的UploadFile方法已经被重构移除了,而且你的代码里还有个小问题——用StreamReader读取图片/二进制文件是不合适的,它是用来处理文本流的,会导致文件内容损坏。下面是正确的实现方式:

正确的文件上传步骤

  1. 用FileStream以二进制模式打开要上传的文件
  2. 通过client.GetUploadClient()获取专门的上传客户端实例
  3. 调用UploadFileAsync方法完成上传并获取TLInputFile对象
  4. 使用获取到的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:28:39