javaapi-电报telegram技巧分享

telegram怎么发文件

telegram bot有50MB的文件大小限定。

我需要发送大文件。有措施解决这个问题吗?

我知道这个项目,但我做不到。

大概有人已经解决了这样的问题?

有一个选项可以通过Telegram API实现文件上传,然后使用bot通过文件ID发送。

我用java编写了一个bot,使用库 https://github.com/pwrtelegram/pwrtelegram

更新

为理解决这个问题,我使用了telegram api,它对大文件的限定是1.5gb。

我更嘻歡kotlogram-完美的lib,有好的文档 https://github.com/rubenlagus/TelegramBots

更新2

我怎样使用此库的示例:


private void uploadToServer(TelegramClient telegramClient, TLInputPeerChannel tlInputPeerChannel, Path pathToF!ile, 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 f!ileId, 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(); } }


TelegramClient telegramClient


TLInputPeerChannel tlInputPeerChannel

中,可以创建为写入文档。

不要复制粘贴,根据需要重写。

假如你想通过电报机器人发送文件,你有 three options :

inputstream(照片限定为10 MB,其他文件限定为50 MB)

从http url(telegram将下载并发送文件。照片最大大小为5 MB,其他种类的内容最大大小为20 MB。)

按文件ID发送缓存文件。(以这种方法发送的文件没有限定)

因此,我提议您预先存储文件ID,并通过这些ID发送文件(这也是 api docs 提议的)。

如今可用!

https://core.telegram.org/bots/api#getfile

万岁!它于9月18日添加:

https://core.telegram.org/bots/api

用法:

在消息的JSON中,您将像从前一样收到

file_id

。带有语音文件的消息对象的示例:


{ message_id: 2675, from: { id: 10000001, first_name: 'john', username: 'john' }, chat: { id: 10000001, first_name: 'john', username: 'john' }, date: 1442848171, voice: { duration: 2, mime_type: 'audio/ogg', file_id: 'AwADBAADYwADO1wlBuF1ogMa7HnMAg', // <------- file_id file_size: 17746 } }

如今,通过API的getFile,您可以获取文件所需的路径信息:


https://api.telegram.org/bot<bot_token>/getFile?file_id=the_file_id

这将返回具有

file_id



file_size



file_path

。然后,您可以使用

file_path

下载文件:


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

请留意,此链接只能使用一个小时。一个小时后,您可以请求另一个链接。这意味着,假如您想以某种方法托管文件,而甘心制止每次提供文件时都检察!并重新检察是否有奇怪链接,那么最好将文件下载到自己的托管服务中。

通过此方法得到的文件的最大大小为

20MB。

错误:使用大于20mb的文件时得到。(如下所示)


{"ok":false,"error_code":400,"description":"Bad Request: file is too big[size:1556925644]"}

从电报的文档:

成功后,将返回一个File对象。然后可以通过链接 https://api.telegram.org/file/bot /下载文件,该文件取自相应。可以确保链接至少有用1小时。链接逾期后,可以通过再次调用getFile来请求一个新的链接。现在,漫游器可以下载最大20MB的文件。

Telegram bot API只能通过

url

param发送小于20 MB的文件,您应该查找 Sending Files 部分。

假如要发送20-50 MB文件,则应下载并重新上传到Telegram bot API服务器 你可以参考这个简单的代码


$curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => 'https://api.telegram.org/bot131210513:AXXXXXX/sendDocument?caption=Hello+World&chat_id=24523586', CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Content-Type: multipart/form-data' ], CURLOPT_POST => true, CURLOPT_POSTFIELDS => [ 'document' => curl_file_create('/etc/hosts', 'plain/text', 'Hosts-file.txt') ] ]); $data = curl_exec($curl); curl_close($curl);

您可以在服务器上安装 pwrtelegram 。然后只需切换API URL,您就可以使用机器人上传最多1.5 GB的文件。这是唯一可行的方法。察看链接以获取更多信息。

别的,

无法

通报任何随机

file_id

,由于Telegram不会发送它。您只能传入之前由您的机器人上传的file_id。要绕过限定,请使用上面的方法。它运作得很好。

首先,您应该将文件发送到机器人,然后获取文件ID。

之后你可以使用fileID来发送你的文件,这样负载将在Telegram的服务器上,而不是你的。固然,您可以从自己的服务器发送文件,但这种方法会降低机器人的速率。

请留意,当您向bot发送文件并获取fileID时,从那一刻起,文件可以立刻发送,而无需将文件存储在您自己的服务器上。


您不需要制作文件ID。

您只需要将文件发送到僵尸程序并让机器人找到答案 !fileID并将其保存在某处以备未来转移。

本文网址:

http://www.1cm8858.com/d/2020612122616_3071_3044330177/home

Ten articles before and after

微博5.38亿条用户数据暗网出售被爆超5亿在-电报telegram技巧分享

挖洞经验Telegram修复撤回照片和视频失灵的漏洞-电报telegram技巧分享

telegram使用技巧汇总中语音-电报telegram技巧分享

如何加入你喜欢的telegram电报群组?资源-电报telegram技巧分享

??貓貓聯盟◾️▫️寵物群电报新群推送TelegramGroupLinks-电报telegram技巧分享

telegram群组资源https:/t.mehomenet6家庭网络资源共享群集体维护的IPTV订阅源(备)同步githubio-电报telegram技巧分享

敢叫板普京的男人家庭网络部署心得-电报telegram技巧分享

晚上耳朵听到发电报声为什么偶经常半夜滴滴答答的时钟声音和?-电报telegram技巧分享

使用AndroidSMS转发到Telegram-电报telegram技巧分享

现在还有人打电报吗电报现在还有什么用吗用吗?人会发电报算得上是文化遗产值得继承-电报telegram技巧分享