也许我正在寻找错误的地方,但我找不到将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()
等的字符串获取。但是现在我想要一个字符串作为"位置"到盒装文件。
答案 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)
}