Le bot télégramme a une taille limite de fichier pour l'envoi de 50 Mo.
J'ai besoin d'envoyer de gros fichiers. Y a-t-il un moyen de contourner cela?
Je connais ce projet https://github.com/pwrtelegram/pwrtelegram mais je n'ai pas pu le faire fonctionner.
Peut-être que quelqu'un a déjà résolu un tel problème?
Il existe une option pour implémenter le téléchargement de fichiers via l'API Telegram, puis envoyer par file_id avec bot.
J'écris un bot en Java en utilisant la bibliothèque https://github.com/rubenlagus/TelegramBots
[~ # ~] mise à jour [~ # ~]
Pour résoudre ce problème, j'utilise une API de télégramme, qui a une limite de 1,5 Go pour les gros fichiers.
Je préfère kotlogram - la bibliothèque parfaite avec une bonne documentation https://github.com/badoualy/kotlogram
MISE À JOUR 2
Exemple d'utilisation de cette bibliothèque:
private void uploadToServer(TelegramClient telegramClient, TLInputPeerChannel tlInputPeerChannel, Path pathToFile, int partSize) {
File file = pathToFile.toFile();
long fileId = getRandomId();
int totalParts = Math.toIntExact(file.length() / partSize + 1);
int filePart = 0;
int offset = filePart * partSize;
try (InputStream is = new FileInputStream(file)) {
byte[] buffer = new byte[partSize];
int read;
while ((read = is.read(buffer, offset, partSize)) != -1) {
TLBytes bytes = new TLBytes(buffer, 0, read);
TLBool tlBool = telegramClient.uploadSaveBigFilePart(fileId, filePart, totalParts, bytes);
telegramClient.clearSentMessageList();
filePart++;
}
} catch (Exception e) {
log.error("Error uploading file to server", e);
} finally {
telegramClient.close();
}
sendToChannel(telegramClient, tlInputPeerChannel, "FILE_NAME.Zip", fileId, totalParts)
}
private void sendToChannel(TelegramClient telegramClient, TLInputPeerChannel tlInputPeerChannel, String name, long fileId, int totalParts) {
try {
String mimeType = name.substring(name.indexOf(".") + 1);
TLVector<TLAbsDocumentAttribute> attributes = new TLVector<>();
attributes.add(new TLDocumentAttributeFilename(name));
TLInputFileBig inputFileBig = new TLInputFileBig(fileId, totalParts, name);
TLInputMediaUploadedDocument document = new TLInputMediaUploadedDocument(inputFileBig, mimeType, attributes, "", null);
TLAbsUpdates tlAbsUpdates = telegramClient.messagesSendMedia(false, false, false,
tlInputPeerChannel, null, document, getRandomId(), null);
} catch (Exception e) {
log.error("Error sending file by id into channel", e);
} finally {
telegramClient.close();
}
}
où TelegramClient telegramClient
et TLInputPeerChannel tlInputPeerChannel
vous pouvez créer en écriture dans la documentation.
NE PAS COPIER-COLLER, réécrire selon vos besoins.
SI vous voulez envoyer un fichier via un télégramme, vous avez trois options :
Donc, je vous recommande de stocker file_ids au préalable et d'envoyer des fichiers par ces identifiants (cela est également recommandé par api docs ).