如何使用python-magic获取网络文件的文件类型?
通常情况下,我会把文件下载到一个叫做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
返回的是一个像文件一样的对象,所以这样用起来很自然。