Downloading files
First, read the documentation on getFile
method.
To download file you have to know its file identifier - FileId
.
Finding the file identifier
Telegram Bot API has several object types, representing file:
PhotoSize
, Animation
, Audio
, Document
, Video
, VideoNote
, Voice
, Sticker
.
The file identifier for each file type can be found in their FileId
property (e.g. Message.Audio.FileId
).
The exception is photos, which represented as an array of PhotoSize[]
objects.
For each photo Telegram sends you a set of PhotoSize
objects - available resolutions, you can choose from.
Generally, you will want the highest quality - the last PhotoSize
object in the array.
With LINQ, this boils down to Message.Photo.Last().FileId
.
Downloading a file
Downloading a file from Telegram is done in two steps:
- Get file information with
getFile
method. ResultingFile
object containsFilePath
from which we can download the file. - Downloading the file.
var fileId = update.Message.Photo.Last().FileId;
var fileInfo = await bot.GetFile(fileId);
var filePath = fileInfo.FilePath;
The URL from which you can now download the file is https://api.telegram.org/file/bot<token>/<FilePath>
.
To download file you can use DownloadFile
function:
const string destinationFilePath = "../downloaded.file";
await using Stream fileStream = System.IO.File.Create(destinationFilePath);
await bot.DownloadFile(filePath, fileStream);
For your convenience the library provides you a helper function that does both - GetInfoAndDownloadFile
:
const string destinationFilePath = "../downloaded.file";
await using Stream fileStream = System.IO.File.Create(destinationFilePath);
var file = await bot.GetInfoAndDownloadFile(fileId, fileStream);