Як завантажити файл?#
Завантаження файла вручну#
По-перше, ви повинні отримати 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)