在Python中,如何获取文件的content_type或mime_type?
可能重复的问题:
如何在Python中找到文件的mime类型?
我正在使用一个处理电子邮件的API(sendgrid.com),它会把所有收到的邮件发送到我应用中的一个网络请求处理程序。邮件的附件会以attachment0=xyz&attachment1=abc的形式发送,另外还有其他邮件字段,比如“收件人”、“抄送”、“主题”等等。
然后,我把这些附件存储在BlobStore(使用App Engine)。为了把这些文件提供给用户,我必须指定mime_type/content_type。根据我的理解,这通常是根据文件类型来决定的。但是我不太清楚如何从传递过来的字符串中获取文件类型。
有没有什么库可以根据文件的字节内容来判断文件类型?
为了澄清一下,这里没有文件名或文件扩展名,只有文件的字节内容。
1 个回答
4
如果你在上传文件时保存了文件名,可以用 mimetypes.guess_type
这个函数来试试。不过,Alexander 提到的那个 StackOverflow 问题也很值得一看。
可惜,这并不适用于你的情况。如果你只有一个二进制数据块,那你就得自己想办法了。可以按照以下简单步骤来操作:
- 建立一个已知文件类型的签名映射表。我马上给个例子。
- 从这个数据块中读取前4个字节。
- 根据你在第一步建立的映射表进行最长匹配。这里的最长匹配是指,如果4个字节都匹配,就用这个,然后再试3个字节、2个字节,最后是1个字节。
举个例子:
ZIP文件以两个字符 PK
开头,RAR文件以 Rar!
开头,PDF文件以 %PDF
开头,PNG文件以 \x89PNG
开头,等等。
这样的方法可能无法识别某些文件(比如JPG),但这是一个不错的起点。
另外,你也可以使用 https://github.com/ahupp/python-magic 这个库。