pub struct ServeDir { /* private fields */ }
fs
only.Expand description
Service that serves files from a given directory and all its sub directories.
The Content-Type
will be guessed from the file extension.
An empty response with status 404 Not Found
will be returned if:
- The file doesn’t exist
- Any segment of the path contains
..
- Any segment of the path contains a backslash
- We don’t have necessary permissions to read the file
Example
use tower_http::services::ServeDir;
// This will serve files in the "assets" directory and
// its subdirectories
let service = ServeDir::new("assets");
// Run our service using `hyper`
let addr = std::net::SocketAddr::from(([127, 0, 0, 1], 3000));
hyper::Server::bind(&addr)
.serve(tower::make::Shared::new(service))
.await
.expect("server error");
Handling files not found
By default ServeDir
will return an empty 404 Not Found
response if there
is no file at the requested path. That can be customized by using
and_then
to change the response:
use tower_http::services::fs::{ServeDir, ServeDirResponseBody};
use tower::ServiceBuilder;
use http::{StatusCode, Response};
use http_body::{Body as _, Full};
use std::io;
let service = ServiceBuilder::new()
.and_then(|response: Response<ServeDirResponseBody>| async move {
let response = if response.status() == StatusCode::NOT_FOUND {
let body = Full::from("Not Found")
.map_err(|err| match err {})
.boxed();
Response::builder()
.status(StatusCode::NOT_FOUND)
.body(body)
.unwrap()
} else {
response.map(|body| body.boxed())
};
Ok::<_, io::Error>(response)
})
.service(ServeDir::new("assets"));
Implementations
If the requested path is a directory append index.html
.
This is useful for static sites.
Defaults to true
.
Set a specific read buffer chunk size.
The default capacity is 64kb.
Trait Implementations
type Response = Response<ResponseBody>
type Response = Response<ResponseBody>
Responses given by the service.
type Future = ResponseFuture
type Future = ResponseFuture
The future response value.
Returns Poll::Ready(Ok(()))
when the service is able to process requests. Read more
Auto Trait Implementations
impl RefUnwindSafe for ServeDir
impl UnwindSafe for ServeDir
Blanket Implementations
Mutably borrows from an owned value. Read more
follow-redirect
only.Create a new Policy
that returns Action::Follow
only if self
and other
return
Action::Follow
. Read more
Yields a mutable reference to the service when it is ready to accept a request.
please use the ServiceExt::ready
method instead
Yields a mutable reference to the service when it is ready to accept a request.
Yields the service when it is ready to accept a request.
Consume this Service
, calling with the providing request once it is ready.
Executes a new future after this service’s future resolves. This does
not alter the behaviour of the poll_ready
method. Read more
fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F> where
F: FnOnce(Self::Response) -> Response + Clone,
fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F> where
F: FnOnce(Self::Response) -> Response + Clone,
Maps this service’s response value to a different value. This does not
alter the behaviour of the poll_ready
method. Read more
Maps this service’s error value to a different value. This does not
alter the behaviour of the poll_ready
method. Read more
Maps this service’s result type (Result<Self::Response, Self::Error>
)
to a different value, regardless of whether the future succeeds or
fails. Read more
fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F> where
F: FnMut(NewRequest) -> Request,
fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F> where
F: FnMut(NewRequest) -> Request,
Composes a function in front of the service. Read more
Composes an asynchronous function after this service. Read more
Composes a function that transforms futures produced by the service. Read more
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more