網頁

2022/6/11

Golang Web API 回應圖片檔

Go語言Web API回應寫出圖片檔的方式如下。


範例環境:

  • Go 1.18

在專案目錄下的static/image有一圖片檔gopher.jpg

go-demo/
├── static/
│   └── image/
│       └── gopher.jpg
├── go.mod
└── main.go

下面的API handler則將此圖片以回應寫出。


範例一 - http.ResponseWriter.Write

ioutil.ReadFile()傳入圖片檔路徑讀取圖片檔[]byte,然後回應頭設定Content-Typeimage/jpg並以http.ResponseWriter.Write()將圖檔資料寫出。

main.go

package main

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

func main() {
    http.HandleFunc("/gopher", func(w http.ResponseWriter, r *http.Request) {
        switch r.Method {
        case http.MethodGet:
            b, err := ioutil.ReadFile("./static/image/gopher.jpg")
            if err != nil {
                panic(err)
            }
            w.Header().Set("Content-Type", "image/jpeg")
            w.Write(b)
        default:
            http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
        }
    })

    http.ListenAndServe(":8080", nil)
}

測試

在瀏覽器url位址輸入http://localhost:8080/gopher即可取得圖片。



範例二 - http.ServeFile

或直接用http.ServeFile即可將檔案目錄路徑的圖片寫出。

main.go

package main

import (
    "net/http"
)

func main() {
    http.HandleFunc("/gopher", func(w http.ResponseWriter, r *http.Request) {
        switch r.Method {
        case http.MethodGet:
            http.ServeFile(w, r, "./static/image/gopher.jpg")
        default:
            http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
        }
    })

    http.ListenAndServe(":8080", nil)
}


測試

在瀏覽器url位址輸入http://localhost:8080/gopher即可取得圖片。



範例三 - http.FileServer

直接將存放圖檔的目錄./static/imagehttp.FileServer()搭配http.StripPrefix()/image/url作為檔案系統路徑。

main.go

package main

import (
    "net/http"
)

func main() {
    fs := http.FileServer(http.Dir("./static/image"))
    http.Handle("/image/", http.StripPrefix("/image/", fs))

    http.ListenAndServe(":8080", nil)
}


測試

在瀏覽器url位址輸入http://localhost:8080/image/gohper.jpg即可取得圖片。


github



沒有留言:

張貼留言