将go.rice与http.ServeFile()一起使用

时间:2016-03-20 09:33:30

标签: go

也许我正在寻找错误的地方,但我找不到将go.rice与http.ServeFile()一起使用的示例。基本上我想要的是提供http.ServeFile()的盒装文件。我现在拥有以下内容。正如您所看到的,我正在寻找一种方法来获取盒装文件的字符串位置,因为http.ServeFile需要这样做。我不知道如何得到它。有什么建议吗?

var StaticBox *rice.Box

func NewStaticBox() {
    StaticBox = rice.MustFindBox("../../static")
}

func Static(req *http.Request, resp *http.Response) {
    stringToBoxedFile := WHAT-TO-DO-HERE
    http.ServeFile(req, resp, stringToBoxedFile)
}

我可以用各种方式使用rice.box。我可以将文件内容作为带有StaticBox.String()等的字符串获取。但是现在我想要一个字符串作为"位置"到盒装文件。

2 个答案:

答案 0 :(得分:3)

您可以使用http.ServeContent代替。 获取HTTPBox并使用HTTPBox.Open获取http.File,它实现了io.ReadSeeker,因此可以与ServeContent一起使用。

或者,您可以将HTTPBox与http.FileServer一起使用,如go.rice文档中所建议的那样(http.FileServer将获取请求的路径,并将其用作文件名来查找文件盒子。)

答案 1 :(得分:2)

实际上有一个非常简单而简短的解决方案来实现你想要的目标:

func main() {
 box := rice.MustFindBox("../../static")
 http.Handle("/", http.FileServer(box.HTTPBox()))
 http.ListenAndServe(":8080", nil)
}