获取文件真实的 mimeType 并与目标格式进行比较的工具库
$ npm install get-real-file-type
import { TypeFile } from 'get-real-file-type';
const fileInput = document.createElement('input');
fileInput.setAttribute('type', file);
fileInput.onchange = function(e) {
const file = e.target.files[0];
const typeFile = new TypeFile(file); // 这里支持传入File实例/包含File实例的对象/Uint8Array
typeFile.onParseEnd = function() {
if(this.isType('video/mp4')) {
// TODO Suc
}
if(this.isType(['video/mp4', 'video/flv', 'video/vnd.avi'])) {
// TODO Suc
}
};
typeFile.onParseError = function() {
// TODO Error
}
typeFile.start();
}
input
参数需要是一个浏览器的File实例
,或者是一个object
包含File实例
,或者是一个Uint8Array
File
实例最终也会转化为Uint8Array
该函数会返回一个TypeFile
实例:
start
方法调用后,文件就开始解析。
看解析的结果来调用onParseEnd
或onParseError
onParseEnd
会在start
方法执行后,文件解析成功
后立即调用,此时该实例已经初始化完成。
初始化完成后会给实例初始化以下属性:
ext
- 根据文件名解析的后缀(只传入 Uint8Array 为 null)mime
- 浏览器通过文件名后缀解析的 mimeType(只传入 Uint8Array 为 null)realExt
- 真实的文件后缀realMime
- 真实的文件的 mimeType
识别不出的属性也为 null
onParseError
会在start
方法执行后,文件解析失败
后立即调用。
默认第一个参数是错误的原因
targetMimeType
可以传入一个字符串,或者一个字符串数组,用于和实例中的文件属性进行比较。
compareType
默认为TypeFile.COMPARE_TYPE.REAL_FIRST
,也就是0
,优先比较真实的文件属性。
返回值为Boolean
- REAL_FIRST: 0 - 表示优先比较真实的文件信息
- BROWSER_FIRST: 1 - 表示优先比较浏览器获取的文件信息
- REAL_ONLY: 2 - 表示只比较真实的文件信息
- BROWSER_ONLY: 3 - 表示只比较浏览器获取的文件信息
由自己维护的浏览器获取的 mimeType 的映射表,来源点击以下查看,以后可能会补充
由file-type
库维护的真实文件 mimeType 映射表
- realMimeMapping['video/mp4']
- realMimeMapping['audio/mpeg']
- ...
由file-type
库维护的真实文件后缀映射表
- realExtMapping['mp4']
- realExtMapping['mp3']
- realExtMapping['aac']
- ...