文件校验
图片校验
文件后缀名校验
1 | /** |
通过正则获取最后一个 ‘.‘ 后的字符,并转为大写字符。
二进制文件校验
将文件读取为二进制文件,并转十六进制字符串
1 | /** |
根据不同文件类型判断
PNG
二进制开头为 89 50 4E 47 0D 0A 1A 0A
1
2
3
4
5
6
7
8
9
10
11/**
* 判断是否为PNG
* 二进制开头为 89 50 4E 47 0D 0A 1A 0A
* @param { File } file 需要判断的文件
* @returns { Boolean }
*/
function isPNGBinary(file) {
const PNG_RET = '89 50 4E 47 0D 0A 1A 0A';
const ret = await blobToHexString(file.slice(0, 8));
return ret === PNG_RET;
}JPG / JPEG
二进制开头为 FF D8,结尾为 FF D9
1
2
3
4
5
6
7
8
9
10
11
12
13
14/**
* 判断是否为JPG
* 二进制开头为 FF D8
* 二进制结尾为 FF D9
* @param { File } file 需要判断的文件
* @returns { Boolean }
*/
function isJPGBinary(file) {
const JPG_RET_START = 'FF D8';
const JPG_RET_END = 'FF D9';
const startRet = await blobToHexString(file.slice(0, 2));
const endRet = await blobToHexString(file.slice(-2));
return startRet === JPG_RET_START && endRet === JPG_RET_END;
}GIF
二进制开头为 47 49 46 38 39 61 或 47 49 46 38 37 61
1
2
3
4
5
6
7
8
9
10
11
12/**
* 判断是否为GIF
* 二进制开头为 47 49 46 38 39 61 或 47 49 46 38 37 61
* @param { File } file 需要判断的文件
* @returns { Boolean }
*/
function isGIFBinary(file) {
const GIF_RET_1 = '47 49 46 38 39 61';
const GIF_RET_2 = '47 49 46 38 37 61';
const ret = await blobToHexString(file.slice(0, 6));
return ret === GIF_RET_1 || ret === GIF_RET_2;
}
图片宽高校验
在二进制文件中,根据不同类型的图片类型读取图片的宽高。
- PNG:宽,第6、7字节;高,第8、9字节
- JPG / JPEG:宽,第165、166字节;高,第163、164字节
- GIF:宽,第6、7字节;高,8、9字节;需反转
1 | const REACT_GET_CONFIG = { |
文件大小校验
1 | /** |