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-Type
為image/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/image
以http.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
即可取得圖片。
- Return an image or file in HTTP response in Go (Golang)
- [Go] 建立下載檔案的 Http Response
- Golang HTTP FileServer 簡介
沒有留言:
張貼留言