Форум программистов, компьютерный форум, киберфорум
Java: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
3 / 3 / 0
Регистрация: 22.10.2021
Сообщений: 217

Не дает получить фото с серверов телеграмма

13.09.2022, 16:59. Показов 2398. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я хочу получить корректную ссылку на оригинал фото, которое пользователь отправил мне в бота. Вот функция, которая за это у меня отвечает:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private String getFullPhotoPath(Message message, TelegramBot telegramBot){
        String fullPath;
        String fileId = message.getPhoto().get(message.getPhoto().size()-1).getFileId();
        GetFile getFile = new GetFile();
        getFile.setFileId(fileId);
        String photopath = null;
        try {
            photopath = telegramBot.execute(getFile).getFilePath();
        } catch (TelegramApiException e) {
            e.printStackTrace();
        }
        fullPath = "https://api.telegram.org/file/bot"+telegramBot.getBotToken()+"/"+photopath;
        return fullPath;
    }


Насколько я могу понимать функция отрабатывает корректно, ведь если вставить в браузер ссылку fullPath начинается скачивание нужного изображение браузером.

Проблемы начинаются когда я пытаюсь воспользоваться этой ссылкой для создания картинки в памяти, и загрузить ее на хостинг, либо отправить эхом юзеру телеграм бота!


ВОТ ПЕРВАЯ ФУНКЦИЯ, тут я пытаюсь отправить картинку эхом, пользователю. При том при всем, данная функция успешно отрабатывает и все отсылает с другими ссылками из интернета:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
public void sendImageFromCloud(Long chat_id, String caption, String imgpath) throws MalformedURLException, TelegramApiException {
        URL url = new URL(imgpath);
        InputFile photo = new InputFile(String.valueOf(url));
        SendPhoto sendPhoto = new SendPhoto();
        sendPhoto.setPhoto(photo);
        sendPhoto.setChatId(chat_id.toString());
        sendPhoto.setCaption(caption);
        sendPhoto.setParseMode("HTML");
        execute(sendPhoto);
    }

повторюсь, функция точно рабочая, ведь отправляет картинки из интернета пользователю. Но когда я получаю ссылку с серверов телеграмма и передаю в эту функцию мне вываливается эксепшен:
Error sending photo: [400] Bad Request: wrong file identifier/HTTP URL specified
at org.telegram.telegrambots.meta.api.metho ds.send.SendPhoto.deserializeResponse(Se ndPhoto.java:90)
at org.telegram.telegrambots.bots.DefaultAb sSender.execute(DefaultAbsSender.java:24 9)
at net.work.tsbot.bot.TelegramBot.sendImage FromCloud(TelegramBot.java:97)
at net.work.tsbot.bot.TelegramBot$$FastClas sBySpringCGLIB$$4f7500d.invoke(<generate d>)
at org.springframework.cglib.proxy.MethodPr oxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibA opProxy.invokeMethod(CglibAopProxy.java: 386)
at org.springframework.aop.framework.CglibA opProxy.access$000(CglibAopProxy.java:85 )
at org.springframework.aop.framework.CglibA opProxy$DynamicAdvisedInterceptor.interc ept(CglibAopProxy.java:704)
at net.work.tsbot.bot.TelegramBot$$Enhancer BySpringCGLIB$$ff4d95f8.sendImageFromClo ud(<generated>)
ВОТ ВТОРЯ ФУНКЦИЯ, которая должна залить фото на хостинг. При попытке залить файл на хостинг cloudinary я тоже получаю эксепшен. Так же при использовании этой функции с другим URL я получаю успех:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public String uploadImage(String path) {
        Cloudinary cloudinary = new Cloudinary(ObjectUtils.asMap(
                "cloud_name", cloud_name,
                "api_key", api_key,
                "api_secret", api_secret,
                "secure", secure));
        File file = new File(path);
        Map uploadResult = null;
        try {
            uploadResult = cloudinary.uploader().upload(file, ObjectUtils.emptyMap());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return uploadResult.get("url").toString();
    }


java.io.FileNotFoundException: https:\api.telegram.org\file\botXXXXXXXX XXX:XXXXXXXXXXXX_DNhEvoVHp6nXp-IW8AyYpg\photos\file_9.jpg (Синтаксическая ошибка в имени файла, имени папки или метке тома)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputSt ream.java:195)
at java.io.FileInputStream.<init>(FileInput Stream.java:138)
at org.apache.http.entity.mime.content.File Body.writeTo(FileBody.java:116)
at org.apache.http.entity.mime.AbstractMult ipartForm.doWriteTo(AbstractMultipartFor m.java:134)
at org.apache.http.entity.mime.AbstractMult ipartForm.writeTo(AbstractMultipartForm. java:157)
at org.apache.http.entity.mime.MultipartFor mEntity.writeTo(MultipartFormEntity.java :113)
чего я не понял или чего не вижу?
очевидно что URL я получаю корректный, так как скачивание файла идет если руками вбить ссылку в браузер.
Но по данному URL не работают функции, которые работают с другими URL.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.09.2022, 16:59
Ответы с готовыми решениями:

Получить фото оригинального размера (Yandex фото)
Есть фото : https://yandex.ru/collections/card/5b48b0ed1a8cc100a8c41dce/ Исходя из исходного кода страницы, можно понять, что оно...

Facebook не дает при редактировании своей статьи добавить фото
То-есть если сохранил статью без фотографии, но ее уже не добавить? Как исхитриться?

Получить список серверов
Пытаюсь получить список серверов 100. Master Server Version 0.5.6.101.24.151.80.35.226:27666 212.159.59.104:27888 ...

3
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
13.09.2022, 17:14
Цитата Сообщение от UnrealCoder Посмотреть сообщение
https:\api.tele
ну вроде понятно все написано
https://stackoverflow.com/ques... ject-image
1
3 / 3 / 0
Регистрация: 22.10.2021
Сообщений: 217
13.09.2022, 17:51  [ТС]
если честно не понятно)
файлу имя надо? или что?
файл хочется сразу в памяти, не записывая на диск.

Я что заметил: мои функции работают с изображениями, которые можно псмотреть в браузере по ссылке.
Ту ссылку которую я получаю от телеги посмотреть нельзя файл скачиваться начинает сразу.
0
3 / 3 / 0
Регистрация: 22.10.2021
Сообщений: 217
14.09.2022, 20:24  [ТС]
вот для понимания
ссылка из гугла принимается и работает ожидаемо
https_://www.google.com/images/branding/googlelogo/2x/googlelogo_light_color_272x92dp.png
а ссылка на картинку с серваков телеги вываливает эксепшен (заменил некоторые символы в токене)
https_://api.telegram.org/file/botХХХХ492725:AAFyXTSlxBwR_ХХХEvoVHp6nXp-ХХХAyYpg/photos/file_12.jpg
правильно ли я понимаю, что я могу ТОЛЬКО скачать файл локально, и потом уже только отправлять с атрибутами multipart/form-data?

Добавлено через 2 часа 28 минут
короче хз че там не работает и почему чесн старался разобраться не смог)
теперь юзаю FileUtils.copyURLToFile из либы org.apache.commons.io.FileUtils;
все работает классно!
но если кто то разбирается, прошу описать суть происходящего выше и обьяснить мне почему не работает такое решение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.09.2022, 20:24
Помогаю со студенческими работами здесь

Как получить список SQL серверов?
вообщето по теме, и плюс в выбранном серваке получить список БД. Это можно реализовать?

Как получить список доступных серверов
Кто работал с SQL SERVER тот сразу меня поймет... Хочу сделать подключение к серверу как в сиквеле, то есть выбираем сервер выбираем...

Как получить список MSSQL 2000 серверов?
Как получить список MSSQL 2000 серверов в сети ,желатилеьно с использованием ActiveX.Использовал SQL DMO.Но гюк при использовании в ASP...

Получить список всех доступных локальных OPC серверов
Доброго времени суток. Пытаюсь получить список зарегистрированных OPC серверов. using System; using System.Collections.Generic; ...

Как получить список доступных MSSQL-серверов в сети?
Через SQLDMO не очень надежно - он должен быть предустановлен на машине. Можете другой способ подсказать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru