0
1

More than 1 year has passed since last update.

【Go, FileServer】画像の配信

Last updated at Posted at 2022-04-14

サーバ上に保存してある画像を各クライアントのブラウザに配信をするため、FileServerを利用した。

前提

クライアントでは、ユーザ情報取得APIで返却されたJSONの中にある画像PathからURLを作りsrcに入れる

  <img src="{画像URL}" className="masterx_draginfo_img" />

FileServer

Goでは、画像の配信は、net/httpパッケージに含まれる、組み込みのFileServerを利用する。

fileServerは指定ディレクトリに一致するファイルがあれば返してくれる。
HTTPプレフィックスとファイルシステムのほぼ1:1のマッピングを効果的に行える。

実装

このような実装となる

    // routingはmuxを使用
    r := mux.NewRouter()

	fs := http.FileServer(http.Dir("./image/profile/"))
	r.Handle("/image/profile/{file-name}",
		http.StripPrefix("/image/profile/", fs)).Methods(http.MethodGet)

muxを使わずシンプルに書いた場合で説明する。
/home/bob/static というディレクトリがあり、このように設定されていたとする。

fs := http.FileServer(http.Dir("/home/bob/static"))
http.Handle("/static", http.StripPrefix("/static", fs))

/static へのリクエストを受け取った場合、 /home/bob/static/フォルダーにあるファイルのリストを返す。(ファイル名の指定がない場合は、リストが返される)
/static/xxxx.jpgへのリクエストを受け取った場合、/home/bob/static/フォルダーにあるxxxx.jpgファイルを返す。

2行目のhttp.StripPrefixを使わなかった場合、リクエストのパスから/static/の部分が取り除かれずに、/home/bob/static/staticへのアクセスとなる。(指定したディレクトリの末に結合される)

ちなみにディレクトリトラバーサルも対策されている為、安全。
https://shogo82148.github.io/blog/2016/04/13/serving-static-files-in-golang

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1