Python Aiogram调用get_file_url获取的图片URL不正确如何处理?
Aiogram获取Telegram图片URL错误解决方案
问题原因
该问题是部分版本aiogram(尤其是2.x老旧版本)的内置bot.get_file_url方法实现逻辑缺陷导致的:该方法没有主动向Telegram API发起getFile请求获取真实的file_path参数,而是直接将传入的file_id作为文件路径拼接在接口地址后,最终返回无效的拼接链接。
修复方案
调整调用逻辑,先请求Telegram API获取包含真实路径的文件对象,再生成有效URL,代码示例如下:
# 1. 先请求接口获取File对象 file_obj = await bot.get_file(message.photo[-1].file_id) # 2. 通过File对象获取正确URL correct_url = file_obj.get_url() # 手动拼接方式效果完全一致,可按需选用 # correct_url = f"https://api.telegram.org/file/bot{bot.token}/{file_obj.file_path}"
注意事项
- 上述方法为异步调用,需要放在异步函数中搭配
await关键字使用 - Telegram Bot API仅允许下载大小不超过20MB的文件,超出大小的文件不会返回
file_path,无法通过该方式获取下载链接 - 该逻辑同时适配aiogram 2.x和3.x全版本,无需依赖存在缺陷的顶层
get_file_url方法
内容的提问来源于stack exchange,提问作者Alien4you2
相关产品推荐
相关产品推荐

