如何向Telegram Bot发送图片?Base64传输遇400错误求解
Telegram Bot发送Base64文件报错的解决方法
问题根源
你直接把纯Base64字符串填进document字段,Telegram API会把这个字符串当成远程文件ID或URL来解析,但Base64里的+、/等字符不符合文件ID的格式规则,所以返回400错误。
两种可行解决办法
办法1:用multipart/form-data格式上传(推荐)
Telegram Bot API优先支持表单上传文件,操作步骤如下:
- 构造
multipart/form-data类型的POST请求 - 加入两个表单字段:
chat_id:目标聊天的IDdocument:把Blob转成的二进制文件流(不用转Base64)
- 请求地址还是
https://api.telegram.org/botXXX/sendDocument
伪代码示例:
// 假设blob是你要发送的文件Blob对象 const formData = new FormData(); formData.append('chat_id', '你的聊天ID'); formData.append('document', blob, '文件名.后缀'); fetch('https://api.telegram.org/bot你的Bot令牌/sendDocument', { method: 'POST', body: formData });
办法2:在JSON请求里用Data URI格式
如果必须用JSON发送,得给Base64字符串加上Data URI前缀,格式是:data:<文件MIME类型>;base64,<你的Base64字符串>
比如你测试的是GIF图片,修改后的请求参数如下:
{ "chat_id": "你的聊天ID", "document": "data:image/gif;base64,R0lGODlhKAAoAMIAAAAAAL6+vgCYAOfn5wAA/wAAAAAAAAAAACH5BAEAAAEALAAAAAAoACgAAAPYGLrc/jDKSau9OOvNu19AKIafIxJoioplqL4vyQEwIdw1AWw0fAu52w5D+xlxNeOw0rMdjb6fztJ0PpEp6FJSDQKjqS2kNxigygQ0Do1Om6fc89tNX5vbdPhYnmKb7Xl5Yg00eHSGfipogwyFb3eQh5GPZowgkpiJmgMClgqOmZOibp1xbmWop6h+q5ylEWStkJSzq0ITsX1pWTd3fa6elzkqR1HBwsNWWFnHIMtRUi+vTNFJzysZANe8Nc0PXdLdHQDgOeQt5ObnJY3k7uvs8fLz9PX29/EJADs=" }
注意:
- 要把
<文件MIME类型>换成实际的类型,比如PDF用application/pdf,PNG图片用image/png - 这种方式有文件大小限制,Telegram一般允许最大50MB以内的文件(不同类型略有差异)
额外提醒
- 确保Bot令牌里的
XXX已经换成你实际的Bot令牌 - 确认
chat_id是有效的目标聊天ID,不确定的话可以调用getUpdates接口获取
内容的提问来源于stack exchange,提问作者NIKOLAY YA
相关产品推荐
相关产品推荐

