如何使用python-magic获取网络文件的文件类型?

4 投票
3 回答
2663 浏览
提问于 2025-04-16 09:53

通常情况下,我会把文件下载到一个叫做StringIO的对象里,然后运行这个代码:

m = magic.Magic()
m.from_buffer(thefile.read(1024))

但是这次我不能下载这个文件,因为这个图片可能有20兆那么大。我想用Python的一些技巧来判断文件类型,而不需要下载整个文件

如果python-magic做不到的话,下一步最好的办法是查看文件头里的mime类型?这样准确吗??

我需要准确的结果。

3 个回答

0

用Python 3来做这件事非常简单。

import requests
import magic
url = 'https://www.google.com/images/branding/googlelogo/1x/googlelogo_light_color_272x92dp.png'
response = requests.get(url)
content_type = magic.from_buffer(response.content)
print(content_type)
2

如果你遇到的是常见的图片格式,比如png或jpg,并且你确认服务器是可靠的,那么你可以使用 'Content-Type' 这个头信息来获取你想要的内容。

不过,这种方法并不如直接查看文件的一部分并传给python-magic来得可靠。因为如果服务器没有正确识别文件格式,可能会把它设置成application/octet-stream。这种情况在视频格式中更常见,但对于图片来说,我觉得使用Content-Type还是可以的。

抱歉,我找不到关于Content-Type准确性的统计数据或研究。建议的只下载文件的一部分也是一个不错的选择。

7

你可以使用 read(1024) 这个方法,而不需要把整个文件都下载下来:

thefile = urllib2.urlopen(someURL)

然后,你可以继续使用你现有的代码。因为 urlopen 返回的是一个像文件一样的对象,所以这样用起来很自然。

撰写回答