英文:
Use go.rice with http.ServeFile()
问题
也许我在看错地方,但我找不到使用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 := 在这里该怎么做?
http.ServeFile(req, resp, stringToBoxedFile)
}
我可以以各种方式使用rice.box
。我可以使用StaticBox.String()
将文件内容作为字符串获取,等等。但现在我想要一个字符串作为打包文件的“路径”。
英文:
Maybe I'm looking at the wrong places, but I cannot find an example of using go.rice with http.ServeFile()
. Basically what I want is serve a boxed file with http.ServeFile()
. What I have now is the following. As you can see I'm looking for a way to get the string location of a boxed file, since http.ServeFile requires that. I don't know how to get it. Any suggestions?
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)
}
I can use the rice.box in various ways. I can get a file contents as a string with StaticBox.String()
, etc. But now I want a string as a "location" to a boxed file.
答案1
得分: 3
你可以使用http.ServeContent。
获取一个HTTPBox,并使用HTTPBox.Open获取一个实现了io.ReadSeeker接口的http.File,然后可以将其与ServeContent一起使用。
另外,你也可以使用HTTPBox和http.FileServer,正如go.rice文档中所建议的那样(http.FileServer会获取请求的路径,并将其作为文件名在box中查找文件)。
英文:
You could use http.ServeContent instead.
Get a HTTPBox and use HTTPBox.Open to get a http.File, which implements io.ReadSeeker, so it can be used with ServeContent.
Alternatively, you could use HTTPBox with http.FileServer, as suggested in the documentation of go.rice (http.FileServer will get the path of the request, and use that as a filename to find the file in the box.)
答案2
得分: 2
实际上,有一个非常简单和简短的解决方案可以实现你想要的:
func main() {
box := rice.MustFindBox("../../static")
http.Handle("/", http.FileServer(box.HTTPBox()))
http.ListenAndServe(":8080", nil)
}
英文:
There is actually a very simple and short solution to achieve what you want:
func main() {
box := rice.MustFindBox("../../static")
http.Handle("/", http.FileServer(box.HTTPBox()))
http.ListenAndServe(":8080", nil)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论