gpt4 book ai didi

python - 为由 urlopen() 或 requests.get() 创建的类文件对象提供文件名

转载 作者:太空狗 更新时间:2023-10-29 21:38:54 27 4
gpt4 key购买 nike

我正在使用 Telepot 构建 Telegram 机器人图书馆。要发送从 Internet 下载的图片,我必须使用 sendPhoto方法,它接受一个类似文件的对象。

通过查看文档,我发现了这个建议:

If the file-like object is obtained by urlopen(), you most likely have to supply a filename because Telegram servers require to know the file extension.

所以问题是,如果我通过使用 requests.get 打开它并使用 BytesIO 包装来获取类似文件的对象,如下所示:

res = requests.get(some_url)
tbot.sendPhoto(
messenger_id,
io.BytesIO(res.content)
)

如何以及在何处提供文件名?

最佳答案

您可以提供文件名作为对象的 .name 属性。

open() 打开文件有一个 .name 属性。

>>> local_file = open("file.txt")
>>> local_file
<open file 'file.txt', mode 'r' at ADDRESS>
>>> local_file.name
'file.txt'

打开 url 不会。这就是文档特别提到这一点的原因。

>>> import urllib
>>> url_file = urllib.open("http://example.com/index.html")
>>> url_file
<addinfourl at 44 whose fp = <open file 'nul', mode 'rb' at ADDRESS>>
>>> url_file.name
AttributeError: addinfourl instance has no attribute 'name'

在你的情况下,你需要创建类文件对象,并给它一个 .name 属性:

res = requests.get(some_url)
the_file = io.BytesIO(res.content)
the_file.name = 'file.image'

tbot.sendPhoto(
messenger_id,
the_file
)

关于python - 为由 urlopen() 或 requests.get() 创建的类文件对象提供文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42809451/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com