我环顾四周,找不到任何具体的东西。我正在使用Go的标准库构建API。在提供我的资源文件时,当我想将RootViewController
发送时,我的CSS文件将以text/plain
的形式发送。
控制台向我发出一条信息消息:
text/css
main.go
Resource interpreted as Stylesheet but transferred with MIME type text/plain: "http://localhost:3000/css/app.css".
我相信我发送的是package main
import (
"bufio"
"log"
"net/http"
"os"
"strings"
"text/template"
)
func main() {
templates := populateTemplates()
http.HandleFunc("/",
func(w http.ResponseWriter, req *http.Request) {
requestedFile := req.URL.Path[1:]
template := templates.Lookup(requestedFile + ".html")
if template != nil {
template.Execute(w, nil)
} else {
w.WriteHeader(404)
}
})
http.HandleFunc("/img/", serveResource)
http.HandleFunc("/css/", serveResource)
log.Fatal(http.ListenAndServe(":3000", nil))
}
func serveResource(w http.ResponseWriter, req *http.Request) {
path := "public" + req.URL.Path
var contentType string
if strings.HasSuffix(path, ".css") {
contentType = "text/css"
} else if strings.HasSuffix(path, ".png") {
contentType = "image/png"
} else {
contentType = "text/plain"
}
f, err := os.Open(path)
if err == nil {
defer f.Close()
w.Header().Add("Content Type", contentType)
br := bufio.NewReader(f)
br.WriteTo(w)
} else {
w.WriteHeader(404)
}
}
func populateTemplates() *template.Template {
result := template.New("templates")
basePath := "templates"
templateFolder, _ := os.Open(basePath)
defer templateFolder.Close()
templatePathRaw, _ := templateFolder.Readdir(-1)
templatePaths := new([]string)
for _, pathInfo := range templatePathRaw {
if !pathInfo.IsDir() {
*templatePaths = append(*templatePaths,
basePath+"/"+pathInfo.Name())
}
}
result.ParseFiles(*templatePaths...)
return result
}
。我看错了吗?
答案 0 :(得分:7)
应用程序在内容类型标题名称中缺少“ - ”。将代码更改为:
w.Header().Add("Content-Type", contentType)