package main import ( "bytes" "encoding/hex" "fmt" "log" "os" "strconv" "strings" ) var picMap map[string]string func init() { picMap = make(map[string]string) picMap["ffd8ffe0"] = "jpg" picMap["ffd8ffe1"] = "jpg" picMap["ffd8ffe8"] = "jpg" picMap["89504e47"] = "png" } func main() { file,err := os.Open("pic/type/test.jpeg") if err != nil { log.Fatal(err.Error()) } defer file.Close() result := judgeType(file) fmt.Println("判断结果: ",result) } func judgeType(file *os.File) bool { buf := make([]byte, 20) n, _ := file.Read(buf) fileCode := bytesToHexString(buf[:n]) for k,_ := range picMap { if strings.HasPrefix(fileCode, k) { return true } } return false } func bytesToHexString(src []byte) string { res := bytes.Buffer{} if src == nil || len(src) <= 0 { return "" } temp := make([]byte, 0) i, length := 100, len(src) if length < i { i = length } for j := 0; j < i; j++ { sub := src[j] & 0xFF hv := hex.EncodeToString(append(temp, sub)) if len(hv) < 2 { res.WriteString(strconv.FormatInt(int64(0), 10)) } res.WriteString(hv) } return res.String() }