如何在网络服务器中打开图像

时间:2017-07-24 06:12:26

标签: go

我有一个简单的网络服务器,我想在浏览器中打开图像。问题是浏览器无法打开我发送的图像。

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项目中

1 个答案:

答案 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)
}