转载

Golang 1.6: 使用mime.TypeByExtension来设置Content-Type

看到很多设置 ResponseWriterContent-Type 属性都是直接在代码里写MIME类型,其实Golang中有根据文件扩展名查询MIME类型的方法,在 mime package中,函数名称是 TypeByExtension ,文档 在这里 。传入扩展名(比如 .txt , .json ),返回MIME类型。不过,对于一些特别常见的MIME类型,比如HTML,JSON这些,直接在代码里写上字符串,要比每次用 mime 这个package查询MIME类型性能要好。

所以可以写这样几个辅助函数,直接用字符串设置常见的MIME类型(HTML, JSON和Form表单), 不常见的MIME类型可以通过内部查询 TypeByExtension 来完成。

import (     "net/http"     "mime" )  func SetHTMLContentType(w http.ResponseWriter) {     setContentType(w, "text/html") }  func SetJSONContentType(w http.ResponseWriter) {     setContentType(w, "application/json") }  func SetFormContentType(w http.ResponseWriter) {     setContentType(w, "x-www-form-urlencoded") }  func SetContentTypeFromExtension(w http.ResponseWriter, extension string) {     mime := mime.TypeByExtension(extension)     if mime != "" {         w.Header().Set("Content-Type", mime)     } }  func setContentType(w http.ResponseWriter, contentType string) {     w.Header().Set("Content-Type", contentType) } 

所以假设要把一个HTML按照纯文本的MIME类型下发,可以这样:

// resWriter变量是http.ResponseWriter类型 SetContentTypeFromExtension(resWriter, ".txt") fmt.Fprint(resWriter, "<html><body><h1>2</h1></body></html>") 
原文  https://www.mgenware.com/blog/?p=3064
正文到此结束
Loading...