Ir al contenido

Servir archivos estáticos

Echo puede servir assets estáticos como imágenes, JavaScript, CSS, PDFs y fuentes desde el filesystem o desde un filesystem embebido.

Echo usa os.DirFS(".") como filesystem por defecto, con raíz en el directorio de trabajo actual. Para cambiarlo, establece el campo Echo#Filesystem:

e := echo.New()
e.Filesystem = os.DirFS("assets")

Consulta middleware Static.

Echo#Static(prefix, root string) registra una ruta que sirve archivos estáticos bajo un prefijo de path desde el directorio raíz dado.

Sirve cualquier archivo de assets bajo /static/*. Un request a /static/js/main.js sirve assets/js/main.js:

e := echo.New()
e.Static("/static", "assets")

Sirve cualquier archivo de assets bajo /*. Un request a /js/main.js sirve assets/js/main.js:

e := echo.New()
e.Static("/", "assets")

Los archivos estáticos se pueden servir desde cualquier fs.FS, incluido un embed.FS. Usa echo.MustSubFS para que los archivos servidos tengan raíz en el subdirectorio correcto: un embed.FS incluye sus subdirectorios como entradas propias.

//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(path, file string) registra una ruta que sirve un único archivo estático.

Sirve una página index desde public/index.html:

e.File("/", "public/index.html")

Sirve un favicon desde app/assets/favicon.ico:

e := echo.New()
e.Filesystem = os.DirFS("/")
e.File("/favicon.ico", "app/assets/favicon.ico") // The file path must not have a leading slash.

Actualización de seguridad de Echo (v5.4.0 / v4.16.0)

Sección titulada «Actualización de seguridad de Echo (v5.4.0 / v4.16.0)»

Las rutas estáticas con segmentos ., .. o vacíos devuelven 404; en modo HTML5 puede servirse el índice. La codificación no estándar de nombres requiere StaticConfig.EnablePathUnescaping para el middleware o Config.EnablePathUnescapingStaticFiles (v5) o Echo#EnablePathUnescapingStaticFiles (v4) para Echo#Static y Echo#StaticFS. Estas opciones también decodifican barras codificadas: no las combines con control de acceso basado en rutas. e.Use(middleware.Static(...)) se ejecuta antes que las guardas de rutas y grupos; guarda los archivos protegidos fuera de su raíz o usa una ruta Echo#Static protegida.