3 回答
TA贡献1829条经验 获得超6个赞
我更喜欢http.ServeFile为此使用http.FileServer. 我想要禁用目录浏览,如果文件丢失,则正确的 404 以及一种特殊情况下索引文件的简单方法。这样,您只需将构建的二进制文件放到一个文件夹中,它就会提供与该二进制文件相关的所有内容。当然,如果您将文件存储在另一个目录中strings.Replace,p则可以使用on 。
func main() {
fmt.Println("Now Listening on 80")
http.HandleFunc("/", serveFiles)
log.Fatal(http.ListenAndServe(":80", nil))
}
func serveFiles(w http.ResponseWriter, r *http.Request) {
fmt.Println(r.URL.Path)
p := "." + r.URL.Path
if p == "./" {
p = "./static/index.html"
}
http.ServeFile(w, r, p)
}
TA贡献2011条经验 获得超2个赞
使用 Golang net/http 包,这项任务非常容易。
您需要做的就是:
package main
import (
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir("./static")))
http.ListenAndServe(":3000", nil)
}
假设静态文件位于static项目根目录中命名的文件夹中。
如果它在文件夹中static,您将进行index.html文件调用http://localhost:3000/,这将导致呈现该索引文件,而不是列出所有可用的文件。
此外,调用该文件夹中的任何其他文件(例如http://localhost:3000/clients.html)将显示该文件,由浏览器正确呈现(至少是 Chrome、Firefox 和 Safari :))
更新:从不同于“/”的 url 提供文件
如果您想提供文件,请从./publicurl 下的文件夹中说:localhost:3000/static您必须使用附加功能:func StripPrefix(prefix string, h Handler) Handler像这样:
package main
import (
"net/http"
)
func main() {
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./public"))))
http.ListenAndServe(":3000", nil)
}
多亏了这一点,您的所有文件./public都可以在localhost:3000/static
没有http.StripPrefix功能,如果您尝试访问 file localhost:3000/static/test.html,服务器将在./public/static/test.html
这是因为服务器将整个 URI 视为文件的相对路径。
幸运的是,它可以通过内置函数轻松解决。
- 3 回答
- 0 关注
- 254 浏览
添加回答
举报