Як відвантажити файл?

Як стверджує official Telegram Bot API documentation існує три способа надіслати файл (фото, наклейки, аудіо, медіа тощо):

Якщо файл уже зберігається десь на серверах Telegram або файл доступний за URL-адресою, вам не потрібно його повторно завантажувати.

But if you need to upload a new file just use subclasses of InputFile.

Here are the three different available builtin types of input file:

Попередження

Be respectful to Telegram

Instances of InputFile are reusable. That means you can create an instance of InputFile and send it multiple times. However, Telegram does not recommend doing this. Instead, once you upload a file, save its file_id and reuse that later.

Відвантаження з файлової системи

Перш за все, вам потрібно буде імпортувати обгортку InputFile:

from aiogram.types import FSInputFile

Тепер ви можете використовувати її:

cat = FSInputFile("cat.png")
agenda = FSInputFile("my-document.pdf", filename="agenda-2019-11-19.pdf")
class aiogram.types.input_file.FSInputFile(path: str | Path, filename: str | None = None, chunk_size: int = 65536)[source]
__init__(path: str | Path, filename: str | None = None, chunk_size: int = 65536)[source]

Об’єкт для відвантаження файлів із файлової системи

Параметри:
  • path – Шлях до файлу

  • filename – Ім’я файлу, яке буде передано в telegram. За замовчуванням, буде взято зі шляху

  • chunk_size – Розмір фрагмента відвантаження

Відвантаження з буферу

Files can be also passed from buffer (For example you generate image using Pillow and you want to send it to Telegram):

Імпорт обгортки:

from aiogram.types import BufferedInputFile

Тепер ви можете використовувати її:

text_file = BufferedInputFile(b"Hello, world!", filename="file.txt")
class aiogram.types.input_file.BufferedInputFile(file: bytes, filename: str, chunk_size: int = 65536)[source]
__init__(file: bytes, filename: str, chunk_size: int = 65536)[source]

Об’єкт для відвантаження файлів із файлової системи

Параметри:
  • file – Байти

  • filename – Ім’я файлу, яке буде передано в telegram.

  • chunk_size – Розмір фрагмента відвантаження

Відвантаження з URL

Якщо вам потрібно відвантажити файл з іншого сервера, але пряме посилання прив’язано до IP-адреси вашого сервера, або ви хочете обійти власні обмеження на завантаження <https://core.telegram.org/bots/api#sending-files> `_ за URL-адресою, ви можете використовувати :obj:`aiogram.types.input_file.URLInputFile.

Імпорт обгортки:

from aiogram.types import URLInputFile

Тепер ви можете використовувати її:

image = URLInputFile(
    "https://www.python.org/static/community_logos/python-powered-h-140x182.png",
    filename="python-logo.png"
)
class aiogram.types.input_file.URLInputFile(url: str, headers: Dict[str, Any] | None = None, filename: str | None = None, chunk_size: int = 65536, timeout: int = 30, bot: 'Bot' | None = None)[source]