在Python中,如何获取文件的内容类型或mime类型?

时间:2011-05-16 10:49:30

标签: python email file mime

  

可能重复:
  How to find the mime type of a file in python?

我正在使用电子邮件处理API(sendgrid.com)将所有传入的电子邮件发布到我的应用中的Web请求处理程序。附件发布为attachment0 = xyz& attachment1 = abc以及其他电子邮件字段,如'to''cc''the subject'等...

然后,我将这些附件存储为BlobStore中的文件(使用App Engine)。要将这些文件提供给用户,必须指定mime_type / content_type。据我了解,它通常取决于文件类型。但是我不清楚如何从传递的字符串中获取文件类型。

是否有一个库从文件的字节内容中找出文件类型?

只是为了澄清,没有文件名或文件扩展名。只是文件的字节内容。

1 个答案:

答案 0 :(得分:3)

如果您在上传时保存了文件名,则可以使用mimetypes.guess_type功能在此处进行操作。亚历山大关联的SO问题很好阅读。

不幸的是,那不是你的情况。如果您拥有的是二进制blob,我恐怕您必须在此处进行一些自定义启发式操作。请按照以下简单步骤操作:

  1. 构建已知签名的地图。我马上就举一个例子。
  2. 从blob中读取前4个字节。
  3. 与您在步骤1中构建的地图进行最长匹​​配。通过最长匹配,我的意思是如果所有4个字节匹配,则接受它,然后尝试使用前3个字节,前2个,最后是第1个。 / LI>

    例如:

    ZIP文件以两个字符PK开头,RAR文件以Rar!开头,PDF以%PDF开头,PNG以\x89PNG开头,等等

    这将无法识别某些文件(例如JPG),但您可以在这里建立良好的开端。

    或者,您也可以使用https://github.com/ahupp/python-magic