main.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package main
  2. import (
  3. "bytes"
  4. "encoding/hex"
  5. "fmt"
  6. "log"
  7. "os"
  8. "strconv"
  9. "strings"
  10. )
  11. var picMap map[string]string
  12. func init() {
  13. picMap = make(map[string]string)
  14. picMap["ffd8ffe0"] = "jpg"
  15. picMap["ffd8ffe1"] = "jpg"
  16. picMap["ffd8ffe8"] = "jpg"
  17. picMap["89504e47"] = "png"
  18. }
  19. func main() {
  20. file,err := os.Open("pic/type/test.jpeg")
  21. if err != nil {
  22. log.Fatal(err.Error())
  23. }
  24. defer file.Close()
  25. result := judgeType(file)
  26. fmt.Println("判断结果: ",result)
  27. }
  28. func judgeType(file *os.File) bool {
  29. buf := make([]byte, 20)
  30. n, _ := file.Read(buf)
  31. fileCode := bytesToHexString(buf[:n])
  32. for k,_ := range picMap {
  33. if strings.HasPrefix(fileCode, k) {
  34. return true
  35. }
  36. }
  37. return false
  38. }
  39. func bytesToHexString(src []byte) string {
  40. res := bytes.Buffer{}
  41. if src == nil || len(src) <= 0 {
  42. return ""
  43. }
  44. temp := make([]byte, 0)
  45. i, length := 100, len(src)
  46. if length < i {
  47. i = length
  48. }
  49. for j := 0; j < i; j++ {
  50. sub := src[j] & 0xFF
  51. hv := hex.EncodeToString(append(temp, sub))
  52. if len(hv) < 2 {
  53. res.WriteString(strconv.FormatInt(int64(0), 10))
  54. }
  55. res.WriteString(hv)
  56. }
  57. return res.String()
  58. }