Як завантажити файл?#

Завантаження файла вручну#

По-перше, ви повинні отримати file_id файлу, який ви хочете завантажити. Інформація про файли, надіслані боту, міститься в Message.

Наприклад, завантажте документ, який прийшов боту.

file_id = message.document.file_id

Потім скористайтеся методом getFile, щоб отримати file_path.

file = await bot.get_file(file_id)
file_path = file.file_path

Після цього скористайтеся методом download_file з об’єкта бота.

download_file(…)#

Завантажує файл за file_path у вказане місце.

Якщо ви хочете автоматично створити місце призначення (io.BytesIO), використовуйте значення призначення за замовчуванням і обробіть результат цього методу.

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]#

Завантажує файл з file_path у вказане місце.

Якщо ви хочете автоматично створити місце призначення (io.BytesIO), використовуйте значення призначення за замовчуванням і обробіть результат цього методу.

Параметри:
  • file_path – Шлях до файлу на сервері Telegram (Ви можете отримати його з aiogram.types.File)

  • destination – Ім’я файлу, шлях до файлу або екземпляр io.IOBase. Для напр. io.BytesIO, за замовчуванням немає

  • timeout – Загальний час очікування в секундах, за замовчуванням 30

  • chunk_size – Розмір фрагментів файлу, за замовчуванням 64 Кб

  • seek – Перейти до початку файлу, коли завантаження завершиться. Використовується лише для призначення з типом typing.BinaryIO, за замовчуванням значення True

Існує два варіанти завантаження файлу: на disk або на binary I/O object.

Завантаження файлу на диск#

Щоб завантажити файл на диск, необхідно вказати ім’я файлу або шлях, куди його завантажити. У цьому випадку функція нічого не поверне.

await bot.download_file(file_path, "text.txt")

Завантаження файлу в оперативну пам’ять#

Щоб завантажити файл до оперативної пам’яті, ви повинні вказати об’єкт із типом typing.BinaryIO або використати значення за замовчуванням (None).

У першому випадку функція поверне ваш об’єкт:

my_object = MyBinaryIO()
result: MyBinaryIO = await bot.download_file(file_path, my_object)
# print(result is my_object)  # True

Якщо залишити значення за замовчуванням, буде створено та повернено об’єкт io.BytesIO.

result: io.BytesIO = await bot.download_file(file_path)

Завантаження файла коротким шляхом#

Щоразу добувати file_path вручну нудно, тому вам слід використовувати метод download.

download(…)#

Завантажує файл за file_id або Downloadable об’єктом у вказане місце.

Якщо ви хочете автоматично створити місце призначення (io.BytesIO), використовуйте значення призначення за замовчуванням і обробіть результат цього методу.

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]#

Завантажує файл за file_id або Downloadable об’єктом у вказане місце.

Якщо ви хочете автоматично створити місце призначення (io.BytesIO), використовуйте значення призначення за замовчуванням і обробіть результат цього методу.

Параметри:
  • file – file_id або Downloadable об’єкт

  • destination – Ім’я файлу, шлях до файлу або екземпляр io.IOBase. Для напр. io.BytesIO, за замовчуванням немає

  • timeout – Загальний час очікування в секундах, за замовчуванням 30

  • chunk_size – Розмір фрагментів файлу, за замовчуванням 64 Кб

  • seek – Перейти до початку файлу, коли завантаження завершиться. Використовується лише для призначення з типом typing.BinaryIO, за замовчуванням значення True

Він відрізняється від download_file лише тим, що приймає file_id або Downloadable об’єкт (об’єкт, який містить атрибут file_id) замість file_path.

Ви можете завантажити файл на disk або в binary I/O object так само.

Приклад:

document = message.document
await bot.download(document)