How to download file?¶
Download file manually¶
First, you must get the file_id of the file you want to download. Information about files sent to the bot is contained in Message.
For example, download the document that came to the bot.
file_id = message.document.file_id
Then use the getFile method to get file_path.
file = await bot.get_file(file_id)
file_path = file.file_path
After that, use the download_file method from the bot object.
download_file(…)¶
Download file by file_path to destination.
If you want to automatically create destination (io.BytesIO
) use default
value of destination and handle result of this method.
- async Bot.download_file(file_path: str, destination: BinaryIO | Path | str | None = None, timeout: int = 30, chunk_size: int = 65536, seek: bool = True) BinaryIO | None [source]¶
Download file by file_path to destination.
If you want to automatically create destination (
io.BytesIO
) use default value of destination and handle result of this method.- Parameters:
file_path – File path on Telegram server (You can get it from
aiogram.types.File
)destination – Filename, file path or instance of
io.IOBase
. For e.g.io.BytesIO
, defaults to Nonetimeout – Total timeout in seconds, defaults to 30
chunk_size – File chunks size, defaults to 64 kb
seek – Go to start of file when downloading is finished. Used only for destination with
typing.BinaryIO
type, defaults to True
There are two options where you can download the file: to disk or to binary I/O object.
Download file to disk¶
To download file to disk, you must specify the file name or path where to download the file. In this case, the function will return nothing.
await bot.download_file(file_path, "text.txt")
Download file to binary I/O object¶
To download file to binary I/O object, you must specify an object with the
typing.BinaryIO
type or use the default (None
) value.
In the first case, the function will return your object:
my_object = MyBinaryIO()
result: MyBinaryIO = await bot.download_file(file_path, my_object)
# print(result is my_object) # True
If you leave the default value, an io.BytesIO
object will be created and returned.
result: io.BytesIO = await bot.download_file(file_path)
Download file in short way¶
Getting file_path manually every time is boring, so you should use the download method.
download(…)¶
Download file by file_id or Downloadable object to destination.
If you want to automatically create destination (io.BytesIO
) use default
value of destination and handle result of this method.
- async Bot.download(file: str | Downloadable, destination: BinaryIO | Path | str | None = None, timeout: int = 30, chunk_size: int = 65536, seek: bool = True) BinaryIO | None [source]¶
Download file by file_id or Downloadable object to destination.
If you want to automatically create destination (
io.BytesIO
) use default value of destination and handle result of this method.- Parameters:
file – file_id or Downloadable object
destination – Filename, file path or instance of
io.IOBase
. For e.g.io.BytesIO
, defaults to Nonetimeout – Total timeout in seconds, defaults to 30
chunk_size – File chunks size, defaults to 64 kb
seek – Go to start of file when downloading is finished. Used only for destination with
typing.BinaryIO
type, defaults to True
It differs from download_file only in that it accepts file_id or an Downloadable object (object that contains the file_id attribute) instead of file_path.
You can download a file to disk or to a binary I/O object in the same way.
Example:
document = message.document
await bot.download(document)