为了账号安全,请及时绑定邮箱和手机立即绑定

你如何使用 go web 服务器提供静态 html 文件?

你如何使用 go web 服务器提供静态 html 文件?

Go
HUX布斯 2021-08-23 17:36:38
你如何使用 go web 服务器提供 index.html(或其他一些静态 HTML 文件)?我只想要一个基本的静态 HTML 文件(例如一篇文章),我可以从 go web 服务器提供它。HTML 应该可以在 go 程序之外修改,就像在使用 HTML 模板时一样。这是我的 Web 服务器,它只托管硬编码文本(“Hello world!”)。package mainimport (  "fmt"  "net/http")func handler(w http.ResponseWriter, r *http.Request) {  fmt.Fprintf(w, "Hello world!")}func main() {  http.HandleFunc("/", handler)  http.ListenAndServe(":3000", nil)}
查看完整描述

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)

}


查看完整回答
反对 回复 2021-08-23
?
森林海

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 视为文件的相对路径。


幸运的是,它可以通过内置函数轻松解决。


查看完整回答
反对 回复 2021-08-23
  • 3 回答
  • 0 关注
  • 240 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信