如何从 python 中的 base64 编码数据中知道文件的 MIME 类型?

How to know MIME-type of a file from base64 encoded data in python?

我有一个文件的 base64 编码字符串。

encoded_data = '/9j/4AAQSkZJRgABAQEASABIAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gOTUK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFB...'

我如何从该字符串中知道文件的 MIME 类型?

在一般情况下,无法可靠地识别一段未标记数据的 MIME 类型。

许多文件格式都有魔术标记,可用于合理准确地确定文件类型,但有些魔术标记选择不当,可能例如与无关文件中的文本一致;当然,完全随机的位序列不是任何明确定义的文件格式。

libmagic 是通常用于执行此任务的 file 命令的核心组件。有几个 Python 绑定,但 https://pypi.org/project/python-libmagic/ 似乎是最受欢迎和最活跃的。

当然,base64只是一种编码无类型二进制数据的方法。这是一个使用示例数据的快速演示。

import base64

import magic

encoded_data = '/9j/4AAQSkZJRgABAQEASABIAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gOTUK/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFB==='
with magic.Magic() as m:
    print(m.from_buffer(base64.b64decode(encoded_data)))

输出:

image/jpeg

(请注意,我必须修复您 encoded_data 末尾的填充。)