filetype.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package spiderutil
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. var fileTypeMap map[string]string = map[string]string{
  7. "ffd8ffe000104a464946": "jpg", //JPEG (jpg)
  8. "89504e470d0a1a0a0000": "png", //PNG (png)
  9. "474946383961": "gif", //GIF (gif)
  10. "49492a00227105008037": "tif", //TIFF (tif)
  11. "424d228c010000000000": "bmp", //16色位图(bmp)
  12. "424d8240090000000000": "bmp", //24位位图(bmp)
  13. "424d8e1b030000000000": "bmp", //256色位图(bmp)
  14. "41433130313500000000": "dwg", //CAD (dwg)
  15. "3c21444f435459504520": "html", //HTML (html)
  16. "3c21646f637479706520": "htm", //HTM (htm)
  17. "48544d4c207b0d0a0942": "css", //css
  18. "696b2e71623d696b2e71": "js", //js
  19. "7b5c727466315c616e73": "rtf", //Rich Text Format (rtf)
  20. "38425053000100000000": "psd", //Photoshop (psd)
  21. "46726f6d3a203d3f6762": "eml", //Email [Outlook Express 6] (eml)
  22. "d0cf11e0a1b11ae10000": "doc", //MS Excel 注意:word、msi 和 excel的文件头一样
  23. "504b0304140006000800": "docx", //docx、pptx文件
  24. "504b03040a0000000000": "docx",
  25. //"d0cf11e0a1b11ae10000": "vsd", //Visio 绘图
  26. "5374616E64617264204A": "mdb", //MS Access (mdb)
  27. "252150532D41646F6265": "ps",
  28. "25504446": "pdf", //Adobe Acrobat (pdf) 25504446 255044462d312e350d0a
  29. "2e524d46000000120001": "rmvb", //rmvb/rm相同
  30. "464c5601050000000900": "flv", //flv与f4v相同
  31. "00000020667479706d70": "mp4",
  32. "49443303000000002176": "mp3",
  33. "000001ba210001000180": "mpg", //
  34. "3026b2758e66cf11a6d9": "wmv", //wmv与asf相同
  35. "52494646e27807005741": "wav", //Wave (wav)
  36. "52494646d07d60074156": "avi",
  37. "4d546864000000060001": "mid", //MIDI (mid)
  38. "504b0304140000000800": "zip",
  39. "504b0304140000000000": "zip",
  40. "526172211a0700": "rar", //526172211a0700 526172211a0700cf9073
  41. "235468697320636f6e66": "ini",
  42. "504b0304140008000800": "jar",
  43. "4d5a9000030000000400": "exe", //可执行文件
  44. "3c25402070616765206c": "jsp", //jsp文件
  45. "4d616e69666573742d56": "mf", //MF文件
  46. "3c3f786d6c2076657273": "xml", //xml文件
  47. "494e5345525420494e54": "sql", //xml文件
  48. "7061636b616765207765": "java", //java文件
  49. "406563686f206f66660d": "bat", //bat文件
  50. "1f8b0800000000000000": "gz", //gz文件
  51. "6c6f67346a2e726f6f74": "properties", //bat文件
  52. "cafebabe0000002e0041": "class", //bat文件
  53. "49545346030000006000": "chm", //bat文件
  54. "04000000010000001300": "mxp", //bat文件
  55. "504b0304140004000800": "xlsx", //xlsx文件
  56. //"d0cf11e0a1b11ae10000": "wps", //WPS文字wps、表格et、演示dps都是一样的
  57. "6431303a637265617465": "torrent",
  58. "6D6F6F76": "mov", //Quicktime (mov)
  59. "FF575043": "wpd", //WordPerfect (wpd)
  60. "CFAD12FEC5FD746F": "dbx", //Outlook Express (dbx)
  61. "2142444E": "pst", //Outlook (pst)
  62. "AC9EBD8F": "qdf", //Quicken (qdf)
  63. "E3828596": "pwl", //Windows Password (pwl)
  64. "2E7261FD": "ram", //Real Audio (ram)
  65. }
  66. func GetFileType(bt []byte) string {
  67. start := fmt.Sprintf("%x", bt[:10])
  68. for k, v := range fileTypeMap {
  69. if strings.HasPrefix(start, k) {
  70. return v
  71. }
  72. }
  73. return ""
  74. }
  75. func ConvertFileSize(s int) string {
  76. size := float64(s)
  77. var kb float64 = 1024
  78. var mb float64 = kb * 1024
  79. var gb float64 = mb * 1024
  80. if size >= gb {
  81. return fmt.Sprintf("%.1f GB", float64(size/gb))
  82. } else if size >= mb {
  83. f := float64(size / mb)
  84. if f > 100 {
  85. return fmt.Sprintf("%.0f MB", f)
  86. }
  87. return fmt.Sprintf("%.1f MB", f)
  88. } else if size >= kb {
  89. f := float64(size / kb)
  90. if f > 100 {
  91. return fmt.Sprintf("%.0f KB", f)
  92. }
  93. return fmt.Sprintf("%.1f KB", f)
  94. }
  95. return fmt.Sprintf("%d B", s)
  96. }