#静态文件 #hyper #静态 #http-file #web #http #file

hyper-staticfile

Hyper 1.0 的静态文件服务

8 个版本

0.10.1 2024 年 7 月 1 日
0.10.0 2023 年 11 月 18 日
0.10.0-alpha.72023 年 7 月 18 日
0.10.0-alpha.52022 年 12 月 23 日
0.1.1 2017 年 8 月 8 日

#86HTTP 服务器

Download history 2911/week @ 2024-05-01 3535/week @ 2024-05-08 3207/week @ 2024-05-15 2423/week @ 2024-05-22 2989/week @ 2024-05-29 2149/week @ 2024-06-05 2614/week @ 2024-06-12 3638/week @ 2024-06-19 2739/week @ 2024-06-26 2593/week @ 2024-07-03 3766/week @ 2024-07-10 3828/week @ 2024-07-17 3050/week @ 2024-07-24 4086/week @ 2024-07-31 4566/week @ 2024-08-07 7030/week @ 2024-08-14

19,220 每月下载量
用于 25 个 Crates(20 个直接使用)

MIT 许可证

61KB
1K SLoC

hyper-staticfile

Docs Crate Build Status

Hyper 1.0 提供静态文件服务。

请参阅 examples/doc_server.rs 以获取一个可编译的完整示例。

文档


lib.rs:

Hyper 1.0 提供静态文件服务。

此库导出用于简单文件服务的 Static 高级接口,以及用于更多控制响应的低级接口。

基本用法

Static 类型本质上是一个包含一些设置的 struct,并包含一个 serve 方法来处理请求。它遵循构建器模式,并实现了 hyper::Service trait。它可以作为

// Instance of `Static` containing configuration. Can be cheaply cloned.
let static_ = hyper_staticfile::Static::new("my/doc/root/");

// A dummy request, but normally obtained from Hyper.
let request = http::Request::get("/foo/bar.txt")
    .body(())
    .unwrap();

// Serve the request. Returns a future for a `hyper::Response`.
let response_future = static_.serve(request);

通常,您会在某处存储 Static 实例,例如在您自己的 hyper::Service 实现中。

高级用法

Static 类型是 ResolverResponseBuilder 的简单包装。您可以通过执行类似以下操作来实现相同的结果

use std::path::Path;

#[tokio::main]
async fn main() {
    // Create a resolver. This can be cheaply cloned.
    let resolver = hyper_staticfile::Resolver::new("my/doc/root/");

    // A dummy request, but normally obtained from Hyper.
    let request = http::Request::get("/foo/bar.txt")
        .body(())
        .unwrap();

    // First, resolve the request. Returns a future for a `ResolveResult`.
    let result = resolver.resolve_request(&request).await.unwrap();

    // Then, build a response based on the result.
    // The `ResponseBuilder` is typically a short-lived, per-request instance.
    let response = hyper_staticfile::ResponseBuilder::new()
        .request(&request)
        .build(result)
        .unwrap();
}

resolve_request 方法尝试在文档根目录中找到文件,并返回一个 ResolveResult 枚举的 future,该枚举确定应发送哪种类型的响应。然后使用 ResponseBuilder 创建默认响应。它包含一些设置,并可以使用构建器模式进行构建。

在两个步骤之间放置它来实现自定义 404 页面等很有用。您的自定义逻辑可以覆盖 ResolveResult 的特定情况,并在必要时使用 ResponseBuilder 回退到默认行为。

依赖关系

~5–7MB
~143K SLoC