SuperAPI AI 工具集

axum-impl-static-files

前端与建站

查看项目

更新于 10-15 22:17

技能介绍

用途:在 Axum 应用中提供静态文件服务,涵盖 CSS/JS/图片资源目录、单一路由单文件,以及单页应用构建中未匹配路径需返回 index.html 的场景。

主要能力与要点:Axum 本身没有静态文件 API,静态服务由 tower-http 提供的 ServeDir(目录)和 ServeFile(单文件)实现。二者是 tower::Service,不是 tower::Layer,只能作为路由目标用 .nest_service()、.fallback_service() 或 .route_service() 挂载,绝不能传给 .layer()。ServeDir 不会因文件缺失返回 Err,而是返回 404。

典型用法:目录挂载在 URL 前缀下用 Router::new().nest_service("/assets", ServeDir::new("assets")),nest_service 会剥离前缀,磁盘路径不要再重复。整站根目录用 .fallback_service(),它不剥离前缀。单文件用 .route_service("/favicon.ico", ServeFile::new("assets/favicon.ico"))。自定义缺失处理:.not_found_service() 会自动包装为 404,.fallback() 保留自定义状态码。SPA 回退用 ServeDir::new("assets").not_found_service(SetStatus::new(ServeFile::new("assets/index.html"), StatusCode::NOT_FOUND)),并把同一 service 作为路由器 fallback_service,因为裸 ServeFile 返回 200。预压缩用 .precompressed_br()、.precompressed_gzip() 等。

依赖:tower-http = { version = "0.6", features = ["fs"] },SPA 回退需加 "set-status"。

限制:具体版本差异与额外方法细节在资料中未完全展开,相关参考见 references 目录。