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

Flutter如何获取文件Magic Number以识别无后缀的文件类型

解决方案

你需要先读取选中文件的头部字节(即Magic Number),再传入lookupMimeType的headerBytes参数即可完成识别,不需要依赖文件后缀。以下是Flutter场景下的完整实现步骤:

实现步骤

  • 第一步:获取file_picker选中文件的File对象
    import 'dart:io';
    import 'dart:math';
    import 'package:file_picker/file_picker.dart';
    import 'package:mime/mime.dart';
    
    FilePickerResult? pickResult = await FilePicker.platform.pickFiles();
    if (pickResult == null) return; // 用户取消选择的情况
    File targetFile = File(pickResult.files.single.path!);
    
  • 第二步:读取文件前16个字节(覆盖绝大多数文件的Magic Number长度,无需读取全文件)
    RandomAccessFile raf = await targetFile.open(mode: FileMode.read);
    int readLength = min(16, await raf.length());
    List<int> headerBytes = readLength > 0 ? await raf.read(readLength) : [];
    await raf.close();
    
  • 第三步:识别MIME类型并转换为文件后缀
    // 第一个参数传空值即可,headerBytes优先级高于文件名后缀判断
    String? mimeType = lookupMimeType('', headerBytes: headerBytes);
    // MIME转对应后缀,识别失败默认返回二进制流类型
    String? fileSuffix = extensionFromMime(mimeType ?? 'application/octet-stream');
    

注意事项

  • 纯文本类文件(txt、json、csv等)无固定Magic Number,识别会返回通用的text/plain类型,可根据业务需求做额外适配
  • 若业务有指定允许上传的文件类型,可提前做白名单校验,不符合要求直接拦截

内容的提问来源于stack exchange,提问作者Zhu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 03:06:08