Servidor Estático
Middleware que proporciona archivos estáticos o archivos incrustados como servicios.
Principales características
StaticDir
proporciona soporte para carpetas locales estáticas. Puede tomar una lista de varias carpetas como argumento. Por ejemplo:use salvo::prelude::*; use salvo::serve_static::StaticDir; #[tokio::main] async fn main() { tracing_subscriber::fmt().init(); let router = Router::with_path("<**path>").get( StaticDir::new([ "examples/static-dir-list/static/boy", "examples/static-dir-list/static/girl", ]) .defaults("index.html") .auto_list(true), ); let acceptor = TcpListener::new("127.0.0.1:5800").bind().await; Server::new(acceptor).serve(router).await; }
[package] name = "example-static-dir-list" version = "0.1.0" edition = "2021" publish = false [dependencies] salvo = { workspace = true, features = ["serve-static"] } tokio = { version = "1", features = ["macros"] } tracing = "0.1" tracing-subscriber = "0.3"
Si el archivo correspondiente no se encuentra en la primera carpeta, buscará en la segunda carpeta.
StaticDir
admite el envío de archivos comprimidos primero cuando existen archivos comprimidos. Por ejemplo, si hay archivosindex.html
,index.html.gz
,index.html.zst
,index.html.br
, entoncesindex.html.gz
,index.html.zst
,index.html.br
se consideran versiones precomprimidas deindex.html
, y los archivos comprimidos correspondientes se enviarán de acuerdo con el información requerida.Proporciona soporte para
rust-embed
, como por ejemplo:use rust_embed::RustEmbed; use salvo::prelude::*; use salvo::serve_static::static_embed; #[derive(RustEmbed)] #[folder = "static"] struct Assets; #[tokio::main] async fn main() { tracing_subscriber::fmt().init(); let router = Router::with_path("<**path>").get(static_embed::<Assets>().fallback("index.html")); let acceptor = TcpListener::new("127.0.0.1:5800").bind().await; Server::new(acceptor).serve(router).await; }
[package] name = "example-static-embed-files" version = "0.1.0" edition = "2021" publish = false [dependencies] rust-embed = { workspace = true } salvo = { workspace = true, features = ["serve-static"] } tokio = { version = "1", features = ["macros"] } tracing = "0.1" tracing-subscriber = "0.3"
with_fallback
se puede configurar para reemplazar el archivo configurado aquí cuando no se encuentra el archivo, lo cual es útil para algunas aplicaciones de sitios web de una sola página.