8 个版本
0.10.1 | 2024 年 7 月 1 日 |
---|---|
0.10.0 | 2023 年 11 月 18 日 |
0.10.0-alpha.7 | 2023 年 7 月 18 日 |
0.10.0-alpha.5 | 2022 年 12 月 23 日 |
0.1.1 |
|
#86 在 HTTP 服务器
19,220 每月下载量
用于 25 个 Crates(20 个直接使用)
61KB
1K SLoC
hyper-staticfile
为 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
类型是 Resolver
和 ResponseBuilder
的简单包装。您可以通过执行类似以下操作来实现相同的结果
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