Go语言学习之mime包(the way to go)
来源:互联网 发布:vb.net 高级编程 pdf 编辑:程序博客网 时间:2024/06/05 01:00
生命不止,继续 go go go !!!
很久之前,写过一篇文章来介绍Windows下如何获取文件的MIME:
《windows客户端开发–获取windows系统中文件的MIME》
其中,用到了叫做名为FindMimeFromData的Windows api.
所以今天介绍一下golang中为我们提供的mime package。
MIME
MIME是英文Multipurpose Internet Mail Extensions的缩写:
MIME is an Internet standard that extends the format of email to support:
Text in character sets other than ASCII
Non-text attachments: audio, video, images, application programs etc.
Message bodies with multiple parts
Header information in non-ASCII character sets
Package mime
func AddExtensionType
func AddExtensionType(ext, typ string) error
AddExtensionType sets the MIME type associated with the extension ext to typ. The extension should begin with a leading dot, as in “.html”.
函数将扩展名和mimetype建立偶联;扩展名应以点号开始,例如”.html”。
mime.AddExtensionType(".svg", "image/svg+xml") mime.AddExtensionType( ".m3u8", "application/x-mpegURL" ); mime.AddExtensionType( ".ts", "video/MP2T" );
func FormatMediaType
func FormatMediaType(t string, param map[string]string) string
FormatMediaType serializes mediatype t and the parameters param as a media type conforming to RFC 2045 and RFC 2616. The type and parameter names are written in lower-case. When any of the arguments result in a standard violation then FormatMediaType returns the empty string.
函数根据RFC 2045和 RFC 2616的规定将媒体类型t和参数param连接为一个mime媒体类型,类型和参数都采用小写字母。任一个参数不合法都会返回空字符串。
s := mime.FormatMediaType("image/svg+xml", map[string]string{"svg": "\u0001"}) fmt.Printf("%#v", s)
func ParseMediaType
func ParseMediaType(v string) (mediatype string, params map[string]string, err error)
ParseMediaType parses a media type value and any optional parameters, per RFC 1521. Media types are the values in Content-Type and Content-Disposition headers (RFC 2183). On success, ParseMediaType returns the media type converted to lowercase and trimmed of white space and a non-nil map. The returned map, params, maps from the lowercase attribute to the attribute value with its case preserved.
函数根据RFC 1521解析一个媒体类型值以及可能的参数。媒体类型值一般应为Content-Type和Conten-Disposition头域的值(参见RFC 2183)。成功的调用会返回小写字母、去空格的媒体类型和一个非空的map。返回的map映射小写字母的属性和对应的属性值。
package main import ( "fmt" "mime" "os" ) func main() { if len(os.Args) != 2 { fmt.Printf("Usage : %s filename \n", os.Args[0]) os.Exit(1) } mType, parameters, err := mime.ParseMediaType(os.Args[1]) if err != nil { fmt.Println(err) os.Exit(1) } fmt.Println("Media type : ", mType) for param := range parameters { fmt.Printf("%v = %v\n\n", param, parameters[param]) } }
func TypeByExtension
func TypeByExtension(ext string) string
TypeByExtension returns the MIME type associated with the file extension ext. The extension ext should begin with a leading dot, as in “.html”. When ext has no associated type, TypeByExtension returns “”.
函数返回与扩展名偶联的MIME类型。扩展名应以点号开始,如”.html”。如果扩展名未偶联类型,函数会返回”“。
内建的偶联表很小,但在unix系统会从本地系统的一或多个mime.types文件(参加下表)进行增补。
MIME应用
获取文件的mime:
这里使用的path包的Ext方法,获取路径字符串中的文件扩展名。
package mainimport ( "fmt" "mime" "path")func main() { filepath := "./1.png" mimetype := mime.TypeByExtension(path.Ext(filepath)) fmt.Println(mimetype) filepath = "./2.txt" mimetype = mime.TypeByExtension(path.Ext(filepath)) fmt.Println(mimetype) filepath = "./3.html" mimetype = mime.TypeByExtension(path.Ext(filepath)) fmt.Println(mimetype)}
输出:
image/png
text/plain; charset=utf-8
text/html; charset=utf-8
设置Content-Type
func SetContentTypeFromExtension(w http.ResponseWriter, extension string) { mime := mime.TypeByExtension(extension) if mime != "" { w.Header().Set("Content-Type", mime) }}
解析Content-Type
mediatype, params, err := mime.ParseMediaType(contentType)fmt.Printf("mediatype=%v, params=%v %v, err=%v\n", mediatype, len(params), params, err)
- Go语言学习之mime包(the way to go)
- Go语言学习之ioutil包(The way to go)
- Go语言学习之net包(The way to go)
- Go语言学习之bufio包(The way to go)
- Go语言学习之errors包(The way to go)
- Go语言学习之log包(The way to go)
- Go语言学习之runtime包(The way to go)
- Go语言学习之flag包(The way to go)
- Go语言学习之strings包(the way to go)
- Go语言学习之strconv包(The way to go)
- Go语言学习之reflect包(The way to go)
- Go语言学习之Hello World(The way to go)
- Go语言学习之变量(The way to go)
- Go语言学习之常量(The way to go)
- Go语言学习之运算符(The way to go)
- Go语言学习之流程控制(The way to go)
- Go语言学习之函数(The way to go)
- Go语言学习之字符串(The way to go)
- E
- CI框架cli命令行
- cookie & session
- [web前端学习笔记]定位的盒子居中显示
- Windows服务(Windows Service,system权限)程序显示界面与用户交互(xp,win7通用)
- Go语言学习之mime包(the way to go)
- PAT乙级 1038.统计同成绩学生(20)
- Bootstrap Table使用整理(二)
- 残差网络
- java 实现单链表反转
- Linux加载IOS镜像
- wmsys.wm_concat 所存在危险 + 函数自定义——代码
- java jni 简介
- 在服务器停电后重启需要操作