javatelegramtelegram-bottelegram-api

send image to telegram as InputStream instead of File


I have a Java code that works fine, it sends a local image from a local directory to a Telegram user:

public class TelegramBot extends TelegramLongPollingBot {

    public TelegramBot(...) {
        super(botToken);
        this.botName = botName();
    }

    @Override
    public String getBotUsername() {
        return botName;
    }

    @Override
    public void onUpdateReceived(Update update) {
        var message = update.getMessage();
        var incomingMessage = Objects.isNull(message.getText()) ? "" : message.getText().toLowerCase();
        var user = message.getFrom();
        var userId = user.getId();

        execute(SendPhoto.builder()
                .chatId(userId)
                .photo(new InputFile(new java.io.File("/home/xxx/img/hello.png")))
                .build());
    }
}

Maven:

<dependency>
    <groupId>org.telegram</groupId>
    <artifactId>telegrambots</artifactId>
    <version>${telegrambots.version}</version>
</dependency>

But I need to send images from a JAR file as InputStream:

InputStream s = this.getClass().getResourceAsStream("/img/hello.png")

Is that possible somehow? Unfortunately, the examples, API docs, and Google did not help.

---- UPDATE ----

Working code with Sbring-Boot integration: https://github.com/zappee/telegram-spring-bot


Solution

  • Try this:

     .photo(new InputFile(this.getClass().getResourceAsStream("/img/hello.png")))