静的ファイルの配信
Echo はファイルシステムまたは埋め込みファイルシステムから、画像、JavaScript、CSS、 PDF、フォントなどの静的アセットを配信できます。
デフォルトファイルシステム
Section titled “デフォルトファイルシステム”Echo は現在の作業ディレクトリをルートにした os.DirFS(".") をデフォルトファイルシステムとして使います。
変更するには Echo#Filesystem フィールドを設定します。
e := echo.New()e.Filesystem = os.DirFS("assets")Static ミドルウェアを使う
Section titled “Static ミドルウェアを使う”Static ミドルウェアを参照してください。
Echo#Static() を使う
Section titled “Echo#Static() を使う”Echo#Static(prefix, root string) は、指定した root ディレクトリからパス prefix 配下の
静的ファイルを配信するルートを登録します。
assets から /static/* 配下で任意のファイルを配信します。/static/js/main.js へのリクエストは
assets/js/main.js を配信します。
e := echo.New()e.Static("/static", "assets")assets から /* 配下で任意のファイルを配信します。/js/main.js へのリクエストは
assets/js/main.js を配信します。
e := echo.New()e.Static("/", "assets")Echo#StaticFS() を使う
Section titled “Echo#StaticFS() を使う”静的ファイルは embed.FS を含む任意の fs.FS から配信できます。配信されるファイルが
正しいサブディレクトリをルートにするよう、echo.MustSubFS を使います。embed.FS は
サブディレクトリもそれぞれのエントリとして含みます。
//go:embed "assets/images"var images embed.FS
func main() { e := echo.New()
e.StaticFS("/images", echo.MustSubFS(images, "assets/images"))
sc := echo.StartConfig{Address: ":1323"} if err := sc.Start(context.Background(), e); err != nil { e.Logger.Error("failed to start server", "error", err) }}Echo#File() を使う
Section titled “Echo#File() を使う”Echo#File(path, file string) は、単一の静的ファイルを配信するルートを登録します。
public/index.html からインデックスページを配信します。
e.File("/", "public/index.html")app/assets/favicon.ico から favicon を配信します。
e := echo.New()e.Filesystem = os.DirFS("/")e.File("/favicon.ico", "app/assets/favicon.ico") // The file path must not have a leading slash.Echo のセキュリティ更新 (v5.4.0 / v4.16.0)
Section titled “Echo のセキュリティ更新 (v5.4.0 / v4.16.0)”.、..、空のパスセグメントは 404 になり、HTML5 モードではインデックスを返す場合があります。標準以外のエスケープを使うファイル名には、ミドルウェアで StaticConfig.EnablePathUnescaping、Echo#Static と Echo#StaticFS で Config.EnablePathUnescapingStaticFiles (v5) または Echo#EnablePathUnescapingStaticFiles (v4) が必要です。これらはエンコードされたスラッシュも復元するため、ルート単位のアクセス制御と併用しないでください。e.Use(middleware.Static(...)) はルートのガードより先に実行されます。保護するファイルはルート外に置くか、ガード付きの Echo#Static で配信してください。