Skip to content

x-mime-s 文件类型嗅探

按文件头判断真实 MIME,不依赖扩展名。支持路径、base64、二进制;Web 还可传 Blob。

兼容性

HarmonyIOSAndroidWEB小程序
支持支持支持支持支持

调用

ts
import { sniff } from "@/uni_modules/x-mime-s"

sniff({
  source: filePath,
  success: (r) => {
    console.log(r.mimeType, r.mediaType, r.extension, r.fromSniff)
  },
  fail: (e) => {
    console.log(e.errCode, e.errMsg)
  }
})

sniff({ base64: "data:image/png;base64,..." })

方法

名称需要说明
sniff见下方,来源四选一判断真实 MIME
warmup预热原生 / WASM 核心,可不调,首次 sniff 也会初始化
getNativeVersion(version: string) => void取原生核心版本,微信为空

参数

XMimeSniffOptions(来源四选一,同时传时优先级:binary > blob > base64 > source

字段说明默认
source文件路径或 URL。App 为本地路径;Web / 微信可为 http(s)-
base64base64,支持 data: 前缀-
binaryArrayBuffer / Uint8Array-
blobWeb 的 File / Blob;其它端返回 1008-
declaredType已声明 MIME-
maxBytes读取字节,64~81921024
useExtensionHint无魔数时用扩展名兜底true
success成功-
fail失败-
complete结束-

XMimeSniffResult

字段说明
mimeTypeimage/png
mediaTypeimage / audio / video / font / application / text / unknown
extension建议扩展名,不含点
fromSnifftrue 为内容嗅探,false 为扩展名/声明兜底
bytesChecked实际检查字节数
elapsedMs嗅探耗时

错误码:100110081008 为当前平台不支持该输入)。

平台差异

  1. blob 仅 Web。
  2. URL 嗅探:Web / 微信可读远程;App 的 source 为本地路径。
  3. 微信无原生核心,getNativeVersion 为空。

版本

版权归https://xui.tmui.design你不得修改及二次开发,仅供TMUI4会员商用使用。不得转给非VIP会员使用,一经查实数倍赔偿,并追究法律责任。

更新日志

1.0.2(2026-09-09)

  • 安卓已是 /data/user/0/... 的绝对路径不再走 convert2AbsFullPath,避免被拼成包内相对路径后报 file read failedfile:// 会解码,content:// / unifile:// 仍按原规则处理。

1.0.1(2026-09-08)

  • 蒸汽 Android:x-mime-native.aar 的 package 从 io.dcloud.uni_modules.xMimeS 改为 io.dcloud.uni_modules.xMimeNative。新 AGP 不允许 UTS 模块和本地 AAR 共用同一个 namespace,否则 Manifest merger 直接失败。JNI / .so 不变。

1.0.0(2026-08-04)

  • 首发:五端文件类型嗅探(Android / iOS / HarmonyOS / Web / 微信小程序)
  • 共享 C++ 核心移植 Chromium mime_sniffer.cc(WHATWG MIME Sniffing)
  • 支持 source / base64 / binary 输入;Web/小程序额外支持 http(s) Range 头部嗅探
  • Web 支持 blob: URL 与 blob(Blob/File,只 slice 头部字节)
  • 导出 sniff / warmup / getNativeVersion
最近更新