怎么判断没有后缀的文件类型?

正常情况下,文件都有后缀名,例如:xxx.gif, xxxx.avi。但是也存在后缀名的文件,去掉文件的后缀名,并不会影响文件本身的内容。所以在文件的数据中,有其他的方式能够标识出文件的类型。
在编程中,把标识文件格式的常量称为 Magic Number, 原名叫做:File Signatures(文件签名)。

Magic Number 在编程中有以下三类使用:

  1. 无法解释其意义的唯一值或者在程序中多次被引用但又可被命名常数所替代的值。
  2. 用来识别文本类型的一个常量数值或字符。
  3. 不易被误解为其他意义的特有值,如全局唯一标识符。

利用 Magic Number 判断文件类型

1. 请求获取文件数据,并转成 Array Buffer

function loadFile(url) {
 return new Promise((resolve, reject) => {
   const xhr = new XMLHttpRequest()
   xhr.onreadystatechange = function() {
     if (xhr.readyState === 4) {
       resolve(xhr)
     }
   }
   xhr.onerror = reject
   xhr.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),文件头:ffd8ff
  • PNG (png),文件头:89504E47
  • GIF (gif),文件头:47494638
  • TIFF (tif),文件头:49492A00
  • Windows Bitmap (bmp),文件头:424D
  • CAD (dwg),文件头:41433130
  • Adobe Photoshop (psd),文件头:38425053
  • Rich Text Format (rtf),文件头:7B5C727466
  • XML (xml),文件头:3C3F786D6C
  • HTML (html),文件头:68746D6C3E
  • Email [thorough only] (eml),文件头:44656C69766572792D646174653A
  • Outlook Express (dbx),文件头:CFAD12FEC5FD746F
  • Outlook (pst),文件头:2142444E
  • MS Word/Excel (xls.or.doc),文件头:D0CF11E0
  • MS Access (mdb),文件头:5374616E64617264204A
  • WordPerfect (wpd),文件头:FF575043
  • Adobe Acrobat (pdf),文件头:255044462D312E
  • Quicken (qdf),文件头:AC9EBD8F
  • Windows Password (pwl),文件头:E3828596
  • ZIP Archive (zip),文件头:504B0304
  • RAR Archive (rar),文件头:52617221
  • Wave (wav),文件头:57415645
  • AVI (avi),文件头:41564920
  • Real Audio (ram),文件头:2E7261FD
  • Real Media (rm),文件头:2E524D46
  • MPEG (mpg),文件头:000001BA
  • MPEG (mpg),文件头:000001B3
  • Quicktime (mov),文件头:6D6F6F76
  • Windows Media (asf),文件头:3026B2758E66CF11
  • MIDI (mid),文件头:4D546864
  • mp3: 494433

以上就是如何判断没有后缀的文件类型方法总结,希望对大家有用。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 怎么判断没有后缀的文件类型?

发表回复