1 个不稳定版本

0.1.0 2023 年 12 月 17 日

Web 编程 中排名第 2019

Download history 63/week @ 2024-03-14 47/week @ 2024-03-21 341/week @ 2024-03-28 2691/week @ 2024-04-04 3370/week @ 2024-04-11 3496/week @ 2024-04-18 2631/week @ 2024-04-25 2224/week @ 2024-05-02 2564/week @ 2024-05-09 2642/week @ 2024-05-16 1712/week @ 2024-05-23 900/week @ 2024-05-30 1058/week @ 2024-06-06 911/week @ 2024-06-13 868/week @ 2024-06-20 977/week @ 2024-06-27

每月下载量 4,060

MIT 许可证 MIT

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)、gzipdeflate。如果客户端支持多种压缩方法,axum_embed 将选择在 Accept-Encoding 标头中列出的第一个。请注意,在此操作中不考虑编码的权重。如果客户端不支持任何压缩方法,axum_embed 将以未压缩的形式提供文件。如果可用,具有扩展名 .br(Brotli)、.gz(GZip)或 .zz(Deflate)的文件,axum_embed 将以压缩形式提供文件。必须为压缩文件提供未压缩文件才能提供服务。

依赖项

~4–13MB
~123K SLoC