Telegram API - получить файл, не сохраняя его физически

299
18 марта 2018, 21:07

Доброй ночи.

Пишу клиент Telegram под Android на базе библиотеки Kotlogram, и столкнулся с со следующей проблемой. Я должен подгрузить список диалогов для пользователя, этот кейс есть в примерах данной библиотеки. Но, помимо самих чатов, мне нужно получить и их изображения для отображения в списке. Весь вечер пытаюсь решить эту проблему, но ничего не выходит. Максимальный результат, которого я смог добиться - сохранить изображение локально. Получилось это у меня следующим образом:

TelegramClient client = Kotlogram.getDefaultClient(application, new ApiStorage());
TLUserFull user = User.getUser(client, telegramMessageEvent.getFromId());
TLPhoto photo = user.getProfilePhoto().getAsPhoto();
MediaInput mediaInput = TLMediaUtilsKt.getMediaInput(TLMediaUtilsKt.getMaxSize(photo.getSizes()));
FileOutputStream fos = new FileOutputStream(new File("C:/TEMP", "test.png"));
client.downloadSync(mediaInput.getInputFileLocation(), mediaInput.getSize(), fos);

Но меня это не устраивает. Наилучшим вариантом было бы получение прямой ссылки на это изображение. Я так понимаю, в Telegram API нельзя сделать как в Telegram Bot API через ссылку вида:

https://api.telegram.org/file/bot<token>/<file_path>

Порывшись в сети, я нашел один вариант из другой библиотеки:

BufferedImage img = ImageIO.read(new ByteArrayInputStream(file.getBytes().getData()));

где file - TLFile.

В самой же библиотеке есть метод, например,

client.getUserPhoto(user);

который возвращает как раз объект типа TLFile. Не знаю, сработал бы данный вариант или нет, но вышеуказанный метод падает с ошибкой

400: LIMIT_INVALID

Я так понимаю, что данная ошибка означает то, что идет запрос на файл, весящий больше 1Мб. И в таком случае его необходимо бы разбить на части, но такой функционал я нашел только в методе

client.downloadSync()

По умолчанию стоит 512Кб.

Насколько я посмотрел, библиотеки на основе Telegram API под различные платформы схожи по своей структуре. Поэтому я хотел бы узнать, каким образом можно получить прямую ссылку на изображение через Telegram API или, на крайний случай, объект, содержащий само изображение. Сохранение файла в память для его дальнейшего считывания меня вообще не устраивает.

Заранее спасибо.

READ ALSO
JSON в Андроид Java

JSON в Андроид Java

У меня в андроид приложении есть JSONObject мне нужно из этого обьекта взять все значения при этос я ключи не знаюМожно его перевести в обычный...

234
Как хранить список Socket клиентов?(в ArrayList)

Как хранить список Socket клиентов?(в ArrayList)

ЗдравствуйтеКлиенты подключаются по сокету

256
День программиста. Как найти?

День программиста. Как найти?

Условие задачи: День программиста отмечается в 255-й день года (при этом 1 января считается нулевым днем)Требуется написать программу, которая...

231
Как высчитать ближайшие дни рождения с помощью LocalDate?

Как высчитать ближайшие дни рождения с помощью LocalDate?

Есть список контактов, каждый контакт содержит день рождения типа LocalDateНужно вывести все контакты, у которых день рождения в ближайшие 2 недели

208