x-mime-s 文件类型嗅探
按文件头判断真实 MIME,不依赖扩展名。支持路径、base64、二进制;Web 还可传 Blob。
兼容性
| Harmony | IOS | Android | WEB | 小程序 |
|---|---|---|---|---|
| 支持 | 支持 | 支持 | 支持 | 支持 |
调用
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) | - |
| base64 | base64,支持 data: 前缀 | - |
| binary | ArrayBuffer / Uint8Array | - |
| blob | Web 的 File / Blob;其它端返回 1008 | - |
| declaredType | 已声明 MIME | - |
| maxBytes | 读取字节,64~8192 | 1024 |
| useExtensionHint | 无魔数时用扩展名兜底 | true |
| success | 成功 | - |
| fail | 失败 | - |
| complete | 结束 | - |
XMimeSniffResult
| 字段 | 说明 |
|---|---|
| mimeType | 如 image/png |
| mediaType | image / audio / video / font / application / text / unknown |
| extension | 建议扩展名,不含点 |
| fromSniff | true 为内容嗅探,false 为扩展名/声明兜底 |
| bytesChecked | 实际检查字节数 |
| elapsedMs | 嗅探耗时 |
错误码:1001–1008(1008 为当前平台不支持该输入)。
平台差异
blob仅 Web。- URL 嗅探:Web / 微信可读远程;App 的
source为本地路径。 - 微信无原生核心,
getNativeVersion为空。
版本
版权归https://xui.tmui.design你不得修改及二次开发,仅供TMUI4会员商用使用。不得转给非VIP会员使用,一经查实数倍赔偿,并追究法律责任。
更新日志
1.0.2(2026-09-09)
- 安卓已是
/data/user/0/...的绝对路径不再走convert2AbsFullPath,避免被拼成包内相对路径后报file read failed。file://会解码,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
