Как скачать файл?

Загрузка файла вручную

Во-первых, вы должны получить 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 | Path, destination: BinaryIO | Path | str | None = None, timeout: int = 30, chunk_size: int = 65536, seek: bool = True) BinaryIO | None[исходный код]

Загружает файл с file_path в указанное место.

Если вы хотите автоматически создать место назначения (io.BytesIO), используйте значение назначения по умолчанию и обработайте результат этого метода.

Параметры:
  • file_path – Путь к файлу на сервере Telegram (Вы можете получить его с litegram.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 | pathlib.Path | str | None = None, timeout: int = 30, chunk_size: int = 65536, seek: bool = True) BinaryIO | None[исходный код]

Загружает файл за 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)