如何通过http提供静态文件

时间:2013-07-17 02:45:54

标签: go

我正在关注building a webpage in go的教程。教程中的所有内容都很容易掌握,但我正在努力扩展它。具体来说,我正在尝试添加一些静态文件(图片)。我一直在浏览go文档并遇到FileServer并添加

http.ServeFile(w, r, "/home/jeff/web/foo.jpg")

在我的处理程序中,我看到正在提供的图像,但它没有使用模板

<h1>{{.Title}}</h1>
<p>[<a href="/edit/{{.Title}}">edit</a>]</p>

<img src="foo.jpg" alt="moooooo">
<img src="foo.jpg" alt="foooooo">

<div>{{printf "%s" .Body}}</div>

*我也尝试过提供图像的完整路径。

我要做的是让图片占据我在模板中小心放置的html标签。

enter image description here

我希望图像出现在我告诉他们的地方,但是应该得到空白的图像。我没有看到任何错误,说文件无法找到。

我认为这应该工作的方式(再次没有这方面的经验)是通过告诉服务器我有这个目录,其中包含一些静态文件,并且每当模板请求图像检查时,如果找到它提供服务。似乎并不那么简单。我究竟做错了什么?我怎样才能让它发挥作用?

我在http.ListenAndServe(":8080", nil)中使用main,换句话说我没有使用apache或其他网络服务器

1 个答案:

答案 0 :(得分:9)

图像应该从模板的不同URL路径提供。

您需要使用以下内容定义静态文件的提供位置:

http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("/home/jeff/web/"))))

然后确保<IMG>源网址类似于:

<img src="/static/foo.jpg" alt="moooooo">

希望有所帮助。