You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何从base64字符串或bytes对象获取文件扩展名

Python 3.8 从bytes/Base64字符串获取文件扩展名实现方案

方案1:使用第三方库python-magic(推荐,准确率最高)

该方案基于文件头魔数识别格式,支持绝大多数主流文件类型,实现最简单。

前置安装

根据你的操作系统选对应安装命令:

  • Windows:pip install python-magic-bin
  • Linux:先执行系统命令apt install libmagic1(Debian/Ubuntu)或yum install file-libs(CentOS),再执行pip install python-magic
  • MacOS:先执行brew install libmagic,再执行pip install python-magic

完整实现代码

你可以直接用下面的逻辑替换SOMETHING_HEAR部分:

import base64
import magic
import mimetypes

def get_extension_from_base(base):
    # 兼容带data URI前缀的base64,比如data:image/png;base64,xxxx
    if ';base64,' in base:
        mime_type = base.split(';')[0].split(':')[1]
        # 直接从MIME类型拿扩展名
        ext = mimetypes.guess_extension(mime_type)
        return ext.lstrip('.') if ext else None
    # 纯base64的情况解码后判断
    decode_bytes = base64.b64decode(base)
    # 从bytes识别MIME类型
    mime_type = magic.from_buffer(decode_bytes, mime=True)
    ext = mimetypes.guess_extension(mime_type)
    # 去掉扩展名前的点,返回纯后缀,比如png、pdf
    return ext.lstrip('.') if ext else None

方案2:无第三方依赖的极简实现

如果不想安装额外库,可以自己维护常见文件的魔数映射,适合只需要识别少量常用格式的场景:

import base64

# 常见文件魔数映射,可按需扩展
MAGIC_NUMBERS = {
    b'\xff\xd8\xff': 'jpg',
    b'\x89PNG\r\n\x1a\n': 'png',
    b'GIF87a': 'gif',
    b'GIF89a': 'gif',
    b'BM': 'bmp',
    b'%PDF-': 'pdf',
    b'PK\x03\x04': 'docx/xlsx/zip', # 注意zip系列格式魔数相同,无法区分
    b'\x49\x49\x2a\x00': 'tiff',
    b'\x4d\x4d\x00\x2a': 'tiff',
    b'\x1a\x45\xdf\xa3': 'mkv',
    b'\x00\x00\x00\x18ftypmp42': 'mp4',
}

def get_extension_from_base(base):
    decode_bytes = base64.b64decode(base)
    # 遍历魔数匹配
    for magic_num, ext in MAGIC_NUMBERS.items():
        if decode_bytes.startswith(magic_num):
            return ext
    # 未匹配到返回None
    return None

注意事项

  • mimetypes是Python标准库,不需要额外安装
  • 魔数识别无法区分同一魔数的不同格式,比如zip、docx、xlsx都是用相同的PK开头魔数,这种场景优先用带MIME前缀的base64判断更准确
  • 对于自定义格式的文件,两种方案都需要自己补充对应识别规则

内容的提问来源于stack exchange,提问作者pedro Henrique Assumpção

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:24:06