Работа с файлами¶
pymaxgram поддерживает загрузку файлов из различных источников.
Типы InputFile¶
BufferedInputFile¶
Загрузка из байтов (данные в памяти):
from maxgram.types import BufferedInputFile
# Из байтов
file = BufferedInputFile(
file=b"Hello, World!",
filename="hello.txt",
)
# Из файла на диске (загружает в память)
file = BufferedInputFile.from_file("path/to/file.txt")
FSInputFile¶
Асинхронная потоковая загрузка из файловой системы:
from maxgram.types import FSInputFile
file = FSInputFile(
path="path/to/large_file.mp4",
filename="video.mp4", # Опционально
chunk_size=64 * 1024, # Размер чанка (64KB по умолчанию)
)
Note
FSInputFile использует aiofiles для асинхронного чтения,
что эффективнее для больших файлов.
URLInputFile¶
Потоковая загрузка по URL:
from maxgram.types import URLInputFile
file = URLInputFile(
url="https://example.com/image.jpg",
filename="image.jpg", # Опционально
headers={"Auth": "token"}, # Дополнительные заголовки
timeout=30, # Таймаут (секунды)
)
Двухэтапная загрузка¶
MAX API использует двухэтапную загрузку файлов:
- Получить URL для загрузки
- Загрузить файл и получить токен
# Упрощённый способ через Bot
token = await bot.upload_file(
file_type="image", # "image", "video", "audio", "file"
file_data=b"...", # Байты файла
filename="photo.jpg",
)
# Использование токена в вложении
from maxgram.types import Attachment
await message.answer(
text="Вот ваше фото:",
attachments=[
Attachment(
type="image",
payload={"token": token},
)
],
)
Ручная двухэтапная загрузка¶
# Шаг 1: Получить URL
upload_info = await bot.get_upload_url(type="image")
print(upload_info.url) # URL для загрузки
print(upload_info.token) # Токен (может быть None)
# Шаг 2: Загрузить файл
result = await bot.session.upload_file(
bot=bot,
upload_url=upload_info.url,
file_data=file_bytes,
filename="photo.jpg",
)
Типы загрузки¶
| Тип | Описание |
|---|---|
image |
Изображения (JPEG, PNG и т.д.) |
video |
Видеофайлы |
audio |
Аудиофайлы |
file |
Любые файлы |