【问题标题】:TLSharp: get fileTLSharp:获取文件
【发布时间】:2020-08-09 12:35:56
【问题描述】:

有错误:LIMIT_INVALID

内存异常?有人做过例子吗?

TLMessageMediaDocument mediaFile = _msg.Media as TLMessageMediaDocument;
TLDocument doc = mediaFile.Document as TLDocument;
client.GetFile(new TLInputDocumentFileLocation() {
   AccessHash = doc.AccessHash,
   Id = doc.Id, Version = doc.Version },
doc.Size).Wait();

【问题讨论】:

    标签: file download get tlsharp


    【解决方案1】:

    下载文件时有几个步骤是必须知道的。 电报文档说:

    1. If precise flag is not specified, then
        The parameter offset must be divisible by 4 KB.
        The parameter limit must be divisible by 4 KB.
        1048576 (1 MB) must be divisible by limit.
    
    2. If precise is specified, then
        The parameter offset must be divisible by 1 KB.
        The parameter limit must be divisible by 1 KB.
        limit must not exceed 1048576 (1 MB).
    

    我不知道什么是精确的,这就是我使用第一个(使用可被 4 KB 整除的限制和偏移)的原因,因为 4 可被 1 整除。

    这是文档链接:https://core.telegram.org/api/files

    这里是我使用 C# TLSharp 的代码

    var mb = 1048576;
    var upperLimit = (int)Math.Pow(2, Math.Ceiling(Math.Log(fileInfo.Size, 2))) * 4;
    var limit = Math.Min(mb, upperLimit);
    
    var currentOffset = 0;
    using (var fs = File.OpenWrite(filename))
    {
        while (currentOffset < fileInfo.Size)
        {
            file = m_telegramClient.GetFile(fileLocation, limit, currentOffset).ConfigureAwait(false).GetAwaiter().GetResult();
            fs.Write(file.Bytes, 0, file.Bytes.Length);
            currentOffset += file.Bytes.Length;
        }
    
        fs.Close();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多