可能的重复项:
如何在python中找到文件的mime类型?
我正在使用电子邮件处理 API (sendgrid.com),该 API 将所有传入电子邮件发布到我的应用中的 Web 请求处理程序。附件作为附件0=xyz&附件1=abc以及其他电子邮件字段(如"收件人"抄送"主题"等)发布。
然后,我将这些附件作为文件存储在 BlobStore(使用 App Engine)中。若要将这些文件提供回给用户,必须指定 mime_type/content_type。据我了解,它通常取决于文件类型。但是我不清楚如何从传递的字符串中获取文件类型。
是否有一个库可以从文件的字节内容中找出文件类型?
澄清一下,没有文件名或文件扩展名。只是文件的字节内容。
如果您在上传文件名时保存了文件名,则可以使用mimetypes.guess_type
函数在此处试一试。亚历山大的链接SO问题很好读。
不幸的是,这不是你的情况。如果你只有一个二进制 blob,恐怕你必须在这里进行一些自定义启发式。请按照以下简单步骤操作:
- 构建已知签名的映射。我马上举个例子。
- 从 Blob 中读取前 4 个字节。
- 对步骤 1 中构建的地图进行最长匹配。通过最长匹配,我的意思是如果所有 4 个字节都匹配,请接受它,然后尝试使用前 3 个字节、前 2 个字节,最后是前 1 个字节。
例如:
ZIP文件以两个字符开头PK
,RAR文件以Rar!
开头,PDF以%PDF
开头,PNG以x89PNG
开头等等
这将无法识别某些文件(例如JPG),但您在这里有一个良好的开端。
或者,您也可以使用 https://github.com/ahupp/python-magic。