1 个不稳定版本
0.1.0 | 2023 年 12 月 17 日 |
---|
在 Web 编程 中排名第 2019
每月下载量 4,060 次
2.5MB
930 行 代码
axum_embed
是一个库,它提供了一个服务,用于使用 axum
Web 框架来服务嵌入式文件。
此库使用 rust_embed
crate 在编译时将文件嵌入到二进制文件中,并使用 axum
crate 通过 HTTP 服务器这些文件。
特性
- 通过 HTTP 服务嵌入式文件
- 可自定义 404、回退和索引文件
- 如果客户端支持并且存在压缩文件,则响应压缩文件
- 如果客户端具有相同的文件(基于 ETag),则响应 304
- 如果客户端请求不带尾部斜杠的目录,则重定向到该目录
示例
use rust_embed::RustEmbed;
use axum_embed::ServeEmbed;
use tokio::net::TcpListener;
#[derive(RustEmbed, Clone)]
#[folder = "examples/assets/"]
struct Assets;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let listener = TcpListener::bind("127.0.0.1:8080").await?;
let serve_assets = ServeEmbed::<Assets>::new();
let app = axum::Router::new().nest_service("/", serve_assets);
axum::serve(listener, app).await?;
Ok(())
}
使用方法
请参阅 示例目录 以获取一个工作示例。
服务压缩文件
axum_embed
库具有服务压缩文件的能力,前提是客户端支持并且压缩文件可用。支持的压缩方法包括 br
(Brotli)、gzip
和 deflate
。如果客户端支持多种压缩方法,axum_embed
将选择在 Accept-Encoding
标头中列出的第一个。请注意,在此操作中不考虑编码的权重。如果客户端不支持任何压缩方法,axum_embed
将以未压缩的形式提供文件。如果可用,具有扩展名 .br
(Brotli)、.gz
(GZip)或 .zz
(Deflate)的文件,axum_embed
将以压缩形式提供文件。必须为压缩文件提供未压缩文件才能提供服务。
依赖项
~4–13MB
~123K SLoC