Explorar el Código

test mime type

master
Patrick Peng Sun hace 8 años
padre
commit
f32f36c9bc
Se han modificado 4 ficheros con 140 adiciones y 19 borrados
  1. +68
    -11
      fileinfo.go
  2. +72
    -8
      fileinfo_test.go
  3. BIN
      media_for_test/example.amr
  4. BIN
      media_for_test/wechat_incoming_msg.mp3

+ 68
- 11
fileinfo.go Ver fichero

@@ -1,10 +1,12 @@
package main

import (
"log"
"fmt"
"io/ioutil"
"os"
"strings"

"github.com/rakyll/magicmime"
filetype "gopkg.in/h2non/filetype.v1"
)

func getFileSize(s string) (size int64, err error) {
@@ -22,17 +24,72 @@ func getFileSize(s string) (size int64, err error) {
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
// 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
}
defer magicmime.Close()
mimetype = kind.MIME.Value
ext = kind.Extension
//fmt.Printf("File type: %s. MIME: %s\n", kind.Extension, kind.MIME.Value)
return
}

mimetype, err = magicmime.TypeByFile(s)
func isMP3(path string) bool {
mime, ext, err := getFileMime(path)
if err != nil {
log.Fatalf("error occured during type lookup: %v", err)
return false
}
//log.Printf("mime-type: %v", mimetype)
return
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
}

+ 72
- 8
fileinfo_test.go Ver fichero

@@ -8,12 +8,14 @@ import (
func TestGetFileSize(t *testing.T) {

var fileSize = map[string]int{
"media_for_test/640x480.jpg": 50668,
"media_for_test/3640x3480.jpg": 785190,
"media_for_test/video.mp4": 75520,
"640x480.jpg": 50668,
"3640x3480.jpg": 785190,
"video.mp4": 75520,
"example.amr": 56486,
"wechat_incoming_msg.mp3": 14639,
}
for k, v := range fileSize {
size, _ := getFileSize(k)
size, _ := getFileSize("media_for_test/" + k)
msg := fmt.Sprintf("%s should have size %d, not %d", k, v, size)
AssertEqual(t, size, int64(v), msg)
}
@@ -21,13 +23,75 @@ func TestGetFileSize(t *testing.T) {

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",
"640x480.jpg": "image/jpeg",
"3640x3480.jpg": "image/jpeg",
"video.mp4": "video/mp4",
"example.amr": "audio/amr",
"wechat_incoming_msg.mp3": "audio/mpeg",
}
for k, v := range fileMime {
mime, _ := getFileMime(k)
mime, _, _ := getFileMime("media_for_test/" + k)
msg := fmt.Sprintf("%s should be %s, not %s", k, v, mime)
AssertEqual(t, mime, v, msg)
}
}

func TestIsMP3(t *testing.T) {
var mp3 = map[string]bool{
"640x480.jpg": false,
"3640x3480.jpg": false,
"video.mp4": false,
"example.amr": false,
"wechat_incoming_msg.mp3": true,
}
for k, v := range mp3 {
r := isMP3("media_for_test/" + k)
msg := fmt.Sprintf("%s is mp3 = %t, not %t", k, v, r)
AssertEqual(t, v, r, msg)
}
}

func TestIsAMR(t *testing.T) {
var amr = map[string]bool{
"640x480.jpg": false,
"3640x3480.jpg": false,
"video.mp4": false,
"example.amr": true,
"wechat_incoming_msg.mp3": false,
}
for k, v := range amr {
r := isAmr("media_for_test/" + k)
msg := fmt.Sprintf("%s AMR = %t, not %t", k, v, r)
AssertEqual(t, v, r, msg)
}
}

func TestIsMP4(t *testing.T) {
var mp4 = map[string]bool{
"640x480.jpg": false,
"3640x3480.jpg": false,
"video.mp4": true,
"example.amr": false,
"wechat_incoming_msg.mp3": false,
}
for k, v := range mp4 {
r := isMP4("media_for_test/" + k)
msg := fmt.Sprintf("%s MP4 = %t, not %t", k, v, r)
AssertEqual(t, v, r, msg)
}
}

func TestIsJPG(t *testing.T) {
var mp4 = map[string]bool{
"640x480.jpg": true,
"3640x3480.jpg": true,
"video.mp4": false,
"example.amr": false,
"wechat_incoming_msg.mp3": false,
}
for k, v := range mp4 {
r := isJPG("media_for_test/" + k)
msg := fmt.Sprintf("%s JPG = %t, not %t", k, v, r)
AssertEqual(t, v, r, msg)
}
}

BIN
media_for_test/example.amr Ver fichero


BIN
media_for_test/wechat_incoming_msg.mp3 Ver fichero


Cargando…
Cancelar
Guardar