@@ -3,6 +3,7 @@ package media
33import (
44 "fmt"
55 log "github.com/sirupsen/logrus"
6+ "mime"
67 "reflect"
78 "strconv"
89 "strings"
@@ -22,32 +23,19 @@ type ContentType struct {
2223
2324func ParseContentType (s string ) ContentType {
2425 c := ContentType {raw : s , Parameters : make (map [string ]string ), Q : 1.0 }
25- a := strings .Split (s , ";" )
26- m := strings .Split (a [0 ], "/" )
27- c .Type = strings .ToLower (strings .TrimSpace (m [0 ]))
28- if len (m ) > 1 {
29- c .Subtype = strings .ToLower (strings .TrimSpace (m [1 ]))
30- }
31- for _ , p := range a [1 :] {
32- kv := strings .Split (p , "=" )
33- switch kv [0 ] {
34- case "q" :
35- if len (kv ) > 1 {
36- var err error
37- if c .Q , err = strconv .ParseFloat (kv [1 ], 64 ); err != nil {
38- log .Debugf ("invalid q parameter in %v" , s )
39- c .Q = 1.0
40- }
41- }
42- default :
43- if len (kv ) > 1 {
44- c .Parameters [strings .TrimSpace (kv [0 ])] = strings .TrimSpace (kv [1 ])
45- } else {
46- c .Parameters [kv [0 ]] = ""
47- }
26+ c .Type , c .Parameters , _ = mime .ParseMediaType (s )
27+ if q , ok := c .Parameters ["q" ]; ok {
28+ var err error
29+ if c .Q , err = strconv .ParseFloat (q , 64 ); err != nil {
30+ log .Debugf ("invalid q parameter in %v" , s )
31+ c .Q = 1.0
4832 }
4933 }
50-
34+ t := strings .Split (c .Type , "/" )
35+ if len (t ) > 1 {
36+ c .Type = strings .TrimSpace (t [0 ])
37+ c .Subtype = strings .TrimSpace (t [1 ])
38+ }
5139 return c
5240}
5341
0 commit comments