我有一个简单的网络服务器,我想在浏览器中打开图像。问题是浏览器无法打开我发送的图像。
package main
import (
"io/ioutil"
"net/http"
"io"
"html/template"
"fmt"
)
func main() {
http.HandleFunc("/images", images)
http.ListenAndServe(":8080", nil)
}
func images(w http.ResponseWriter, r *http.Request) {
t, err := template.ParseFiles("templates/link.html")
if err != nil {
fmt.Fprintf(w, err.Error())
return
}
t.ExecuteTemplate(w, "link", nil)
}
也是我的html模板包,我在计算机上创建了一个文件链接。名为link.html
{{ define "link" }}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p> <a href="/images/2.jpg">apple</a></p>
<br>
</body>
</html>
{{ end }}
我不明白为什么它不起作用。非常乐意提供帮助。另外我想要添加到服务器的所有文件都在这个golang项目中
答案 0 :(得分:2)
这是因为您不拥有任何专用路径来处理任何图片的请求。
我的建议是初始化一个基于URI路径名提供文件的HTTP处理程序。您可以使用该处理程序作为服务图像的方式。
fs := http.FileServer(http.Dir("images"))
然后绑定它:
http.Handle("/images/", http.StripPrefix("/images/", fs))
以下是我的建议的完整代码:
package main
import (
"fmt"
"html/template"
"net/http"
)
func main() {
// We're creating a file handler, here.
fs := http.FileServer(http.Dir("images"))
http.HandleFunc("/images", images)
// We're binding the handler to the `/images` route, here.
http.Handle("/images/", http.StripPrefix("/images/", fs))
http.ListenAndServe(":8080", nil)
}
func images(w http.ResponseWriter, r *http.Request) {
t, err := template.ParseFiles("templates/link.html")
if err != nil {
fmt.Fprintf(w, err.Error())
return
}
t.ExecuteTemplate(w, "link", nil)
}