package main import ( "fmt" "io/ioutil" "os" "strings" filetype "gopkg.in/h2non/filetype.v1" ) func getFileSize(s string) (size int64, err error) { f, err := os.Open(s) if err != nil { size = 0 return } fi, err := f.Stat() if err == nil { size = fi.Size() } else { size = 0 } return } // not able to detect audio/amr and requries linux local dependency, not good // func getFileMime(s string) (mimetype string, err error) { // if err := magicmime.Open(magicmime.MAGIC_MIME_TYPE | magicmime.MAGIC_SYMLINK | magicmime.MAGIC_ERROR); err != nil { // log.Fatal(err) // return "", err // } // defer magicmime.Close() // mimetype, err = magicmime.TypeByFile(s) // if err != nil { // log.Fatalf("error occured during type lookup: %v", err) // } // //log.Printf("mime-type: %v", mimetype) // return // } func getFileMime(s string) (mimetype string, ext string, err error) { buf, _ := ioutil.ReadFile(s) kind, unkwown := filetype.Match(buf) if unkwown != nil { fmt.Printf("Unkwown: %s", unkwown) return } mimetype = kind.MIME.Value ext = kind.Extension //fmt.Printf("File type: %s. MIME: %s\n", kind.Extension, kind.MIME.Value) return } func isMP3(path string) bool { mime, ext, err := getFileMime(path) if err != nil { return false } check1 := strings.EqualFold("mp3", ext) check2 := strings.EqualFold("audio/mpeg", mime) return check1 && check2 } func isAmr(path string) bool { mime, ext, err := getFileMime(path) if err != nil { return false } check1 := strings.EqualFold("amr", ext) check2 := strings.EqualFold("audio/amr", mime) return check1 && check2 } func isMP4(path string) bool { mime, ext, err := getFileMime(path) if err != nil { return false } check1 := strings.EqualFold("mp4", ext) check2 := strings.EqualFold("video/mp4", mime) return check1 && check2 } func isJPG(path string) bool { mime, ext, err := getFileMime(path) if err != nil { return false } check1 := strings.EqualFold("jpg", ext) check2 := strings.EqualFold("image/jpeg", mime) return check1 && check2 }