在Go中使用<img/>标记显示本地图像

时间:2012-10-15 03:00:36

标签: go image

如何使用<img>标记在Go中显示本地图像?

我尝试了以下内容:

fmt.Fprintf(w, "</br><img src='" + path.Join(rootdir,  fileName) + "' ></img>") 

其中rootdir = os.Getwd()和fileName是文件的名称。

如果我尝试使用相同路径的http.ServeFile,那么我可以下载图片,但我想将其嵌入网页本身。

3 个答案:

答案 0 :(得分:7)

我将在前言中说我的Go知识充其量是残酷的,但我所做的一些实验已经涉及到这一点,所以也许这至少会指向正确的方向。基本上,下面的代码使用句柄来处理/images/下的任何内容,它提供根目录中images文件夹中的文件(在我的例子中是/home/username/go)。然后,您可以在/images/标记中对<img>进行硬编码,或者像之前一样使用path.Join(),将images作为第一个参数。

package main

import (
  "fmt"
  "net/http"
  "os"
  "path"
)


func handler(w http.ResponseWriter, r *http.Request) {
  fileName := "testfile.jpg"
  fmt.Fprintf(w, "<html></br><img src='/images/" + fileName + "' ></html>")
}

func main() {
  rootdir, err := os.Getwd()
  if err != nil {
    rootdir = "No dice"
  }

  // Handler for anything pointing to /images/
  http.Handle("/images/", http.StripPrefix("/images",
        http.FileServer(http.Dir(path.Join(rootdir, "images/")))))
  http.HandleFunc("/", handler)
  http.ListenAndServe(":8080", nil)
}

答案 1 :(得分:2)

也许你可以使用data URI

答案 2 :(得分:0)

这对我有用:

package main

import (
   "io"
   "net/http"
   "os"
)

func index(w http.ResponseWriter, r *http.Request) {
   f, e := os.Open(r.URL.Path[1:])
   if e != nil {
      panic(e)
   }
   defer f.Close()
   io.Copy(w, f)
}

func main() {
   http.HandleFunc("/", index)
   new(http.Server).ListenAndServe()
}