文件校验
图片校验
文件后缀名校验
| 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 | /** |