From 62f6f9f15b18162d4b5508d6dfebad2e60f3d49e Mon Sep 17 00:00:00 2001 From: Patrick Peng Sun Date: Wed, 10 May 2017 16:48:50 +1000 Subject: [PATCH] get file mime type done --- fileinfo.go | 18 ++++++++++++++++-- fileinfo_test.go | 13 +++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/fileinfo.go b/fileinfo.go index c520147..757e463 100644 --- a/fileinfo.go +++ b/fileinfo.go @@ -1,7 +1,10 @@ package main import ( + "log" "os" + + "github.com/rakyll/magicmime" ) func getFileSize(s string) (size int64, err error) { @@ -19,6 +22,17 @@ func getFileSize(s string) (size int64, err error) { return } -func getFileMime(s string) (mime string) { - return "" +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 } diff --git a/fileinfo_test.go b/fileinfo_test.go index 81f2985..f6fb02b 100644 --- a/fileinfo_test.go +++ b/fileinfo_test.go @@ -18,3 +18,16 @@ func TestGetFileSize(t *testing.T) { AssertEqual(t, size, int64(v), msg) } } + +func TestGetMimeType(t *testing.T) { + var fileMime = map[string]string{ + "media_for_test/640x480.jpg": "image/jpeg", + "media_for_test/3640x3480.jpg": "image/jpeg", + "media_for_test/video.mp4": "video/mp4", + } + for k, v := range fileMime { + mime, _ := getFileMime(k) + msg := fmt.Sprintf("%s should be %s, not %s", k, v, mime) + AssertEqual(t, mime, v, msg) + } +}