如何判断没有后缀的文件类型?

来源 | https://segmentfault.com/a/1190000041236429
无法解释其意义的唯一值或者在程序中多次被引用但又可被命名常数所替代的值。 用来识别文本类型的一个常量数值或字符。 不易被误解为其他意义的特有值,如全局唯一标识符。
利用 Magic Number 判断文件类型
function loadFile(url) {return new Promise((resolve, reject) => {const xhr = new XMLHttpRequest()xhr.onreadystatechange = function() {if (xhr.readyState === 4) {resolve(xhr)}}xhr.onerror = rejectxhr.open('GET', url, true)xhr.responseType = 'arraybuffer'xhr.send('')})}
2、 buffer 转 16 进制字符串
function buf2hex(buffer) {return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('')}
3、根据 16 进制字符串获取文件头,判断文件类型
function getFileType(url) {loadFile(url).then(xhr => {const hex = buf2hex(xhr.response)console.log(hex)// todo....})}
测试:

常见文件头:
JPEG (jpg),文件头:ffd8ffPNG (png),文件头:89504E47GIF (gif),文件头:47494638TIFF (tif),文件头:49492A00Windows Bitmap (bmp),文件头:424DCAD (dwg),文件头:41433130Adobe Photoshop (psd),文件头:38425053Rich Text Format (rtf),文件头:7B5C727466XML (xml),文件头:3C3F786D6Chtml (html),文件头:68746D6C3EEmail [thorough only] (eml),文件头:44656C69766572792D646174653AOutlook Express (dbx),文件头:CFAD12FEC5FD746FOutlook (pst),文件头:2142444EMS Word/Excel (xls.or.doc),文件头:D0CF11E0MS Access (mdb),文件头:5374616E64617264204AWordPerfect (wpd),文件头:FF575043Adobe Acrobat (pdf),文件头:255044462D312EQuicken (qdf),文件头:AC9EBD8FWindows Password (pwl),文件头:E3828596ZIP Archive (zip),文件头:504B0304RAR Archive (rar),文件头:52617221Wave (wav),文件头:57415645AVI (avi),文件头:41564920Real Audio (ram),文件头:2E7261FDReal Media (rm),文件头:2E524D46MPEG (mpg),文件头:000001BAMPEG (mpg),文件头:000001B3Quicktime (mov),文件头:6D6F6F76Windows Media (asf),文件头:3026B2758E66CF11MIDI (mid),文件头:4D546864mp3: 494433
本文完~
学习更多技能
请点击下方公众号
![]()

评论
