pub struct Files { /* private fields */ }Expand description
Static files handling service.
Files service must be registered with App::service() method.
§Examples
use actix_web::App;
use actix_files::Files;
let app = App::new()
.service(Files::new("/static", "."));Implementations§
Source§impl Files
impl Files
Sourcepub fn new<T>(mount_path: &str, serve_from: T) -> Files
pub fn new<T>(mount_path: &str, serve_from: T) -> Files
Create new Files instance for a specified base directory.
§Argument Order
The first argument (mount_path) is the root URL at which the static files are served.
For example, /assets will serve files at example.com/assets/....
The second argument (serve_from) is the location on disk at which files are loaded.
This can be a relative path. For example, ./ would serve files from the current
working directory.
§Implementation Notes
If the mount path is set as the root path /, services registered after this one will
be inaccessible. Register more specific handlers and services first.
Files utilizes the existing Tokio thread-pool for blocking filesystem operations.
The number of running threads is adjusted over time as needed, up to a maximum of 512 times
the number of server workers, by default.
Sourcepub fn show_files_listing(self) -> Files
pub fn show_files_listing(self) -> Files
Show files listing for directories.
By default show files listing is disabled.
When used with Files::index_file(), files listing is shown as a fallback
when the index file is not found.
Sourcepub fn redirect_to_slash_directory(self) -> Files
pub fn redirect_to_slash_directory(self) -> Files
Redirects to a slash-ended path when browsing a directory.
By default never redirect.
Sourcepub fn files_listing_renderer<F>(self, f: F) -> Fileswhere
F: for<'r, 's> Fn(&'r Directory, &'s HttpRequest) -> Result<ServiceResponse, Error> + 'static,
pub fn files_listing_renderer<F>(self, f: F) -> Fileswhere
F: for<'r, 's> Fn(&'r Directory, &'s HttpRequest) -> Result<ServiceResponse, Error> + 'static,
Set custom directory renderer.
Sourcepub fn mime_override<F>(self, f: F) -> Files
pub fn mime_override<F>(self, f: F) -> Files
Specifies MIME override callback.
Sourcepub fn path_filter<F>(self, f: F) -> Files
pub fn path_filter<F>(self, f: F) -> Files
Sets path filtering closure.
The path provided to the closure is relative to serve_from path.
You can safely join this path with the serve_from path to get the real path.
However, the real path may not exist since the filter is called before checking path existence.
When a path doesn’t pass the filter, Files::default_handler is called if set, otherwise,
404 Not Found is returned.
§Examples
use std::path::Path;
use actix_files::Files;
// prevent searching subdirectories and following symlinks
let files_service = Files::new("/", "./static").path_filter(|path, _| {
path.components().count() == 1
&& Path::new("./static")
.join(path)
.symlink_metadata()
.map(|m| !m.file_type().is_symlink())
.unwrap_or(false)
});Sourcepub fn index_file<T>(self, index: T) -> Files
pub fn index_file<T>(self, index: T) -> Files
Set index file
Shows specific index file for directories instead of showing files listing.
If the index file is not found, files listing is shown as a fallback if
Files::show_files_listing() is set.
Sourcepub fn read_mode_threshold(self, size: u64) -> Files
pub fn read_mode_threshold(self, size: u64) -> Files
Sets the size threshold that determines file read mode (sync/async).
When a file is smaller than the threshold (bytes), the reader will switch from synchronous (blocking) file-reads to async reads to avoid blocking the main-thread when processing large files.
Tweaking this value according to your expected usage may lead to signifiant performance
gains (or losses in other handlers, if size is too high).
When the experimental-io-uring crate feature is enabled, file reads are always async.
Default is 0, meaning all files are read asynchronously.
Sourcepub fn use_etag(self, value: bool) -> Files
pub fn use_etag(self, value: bool) -> Files
Specifies whether to use ETag or not.
Default is true.
Sourcepub fn use_last_modified(self, value: bool) -> Files
pub fn use_last_modified(self, value: bool) -> Files
Specifies whether to use Last-Modified or not.
Default is true.
Sourcepub fn prefer_utf8(self, value: bool) -> Files
pub fn prefer_utf8(self, value: bool) -> Files
Specifies whether text responses should signal a UTF-8 encoding.
Default is false (but will default to true in a future version).
Sourcepub fn guard<G>(self, guard: G) -> Fileswhere
G: Guard + 'static,
pub fn guard<G>(self, guard: G) -> Fileswhere
G: Guard + 'static,
Adds a routing guard.
Use this to allow multiple chained file services that respond to strictly different properties of a request. Due to the way routing works, if a guard check returns true and the request starts being handled by the file service, it will not be able to back-out and try the next service, you will simply get a 404 (or 405) error response.
To allow POST requests to retrieve files, see Files::method_guard().
§Examples
use actix_web::{guard::Header, App};
use actix_files::Files;
App::new().service(
Files::new("/","/my/site/files")
.guard(Header("Host", "example.com"))
);Sourcepub fn method_guard<G>(self, guard: G) -> Fileswhere
G: Guard + 'static,
pub fn method_guard<G>(self, guard: G) -> Fileswhere
G: Guard + 'static,
Specifies guard to check before fetching directory listings or files.
Note that this guard has no effect on routing; it’s main use is to guard on the request’s
method just before serving the file, only allowing GET and HEAD requests by default.
See Files::guard for routing guards.
Sourcepub fn disable_content_disposition(self) -> Files
pub fn disable_content_disposition(self) -> Files
Disable Content-Disposition header.
By default Content-Disposition` header is enabled.
Sourcepub fn default_handler<F, U>(self, f: F) -> Fileswhere
F: IntoServiceFactory<U, ServiceRequest>,
U: ServiceFactory<ServiceRequest, Config = (), Response = ServiceResponse, Error = Error> + 'static,
pub fn default_handler<F, U>(self, f: F) -> Fileswhere
F: IntoServiceFactory<U, ServiceRequest>,
U: ServiceFactory<ServiceRequest, Config = (), Response = ServiceResponse, Error = Error> + 'static,
Sets default handler which is used when no matched file could be found.
§Examples
Setting a fallback static file handler:
use actix_files::{Files, NamedFile};
use actix_web::dev::{ServiceRequest, ServiceResponse, fn_service};
let files = Files::new("/", "./static")
.index_file("index.html")
.default_handler(fn_service(|req: ServiceRequest| async {
let (req, _) = req.into_parts();
let file = NamedFile::open_async("./static/404.html").await?;
let res = file.into_response(&req);
Ok(ServiceResponse::new(req, res))
}));Enables serving hidden files and directories, allowing a leading dots in url fragments.
Trait Implementations§
Source§impl HttpServiceFactory for Files
impl HttpServiceFactory for Files
fn register(self, config: &mut AppService)
Source§impl ServiceFactory<ServiceRequest> for Files
impl ServiceFactory<ServiceRequest> for Files
Source§type Response = ServiceResponse
type Response = ServiceResponse
Source§type Service = FilesService
type Service = FilesService
Service created by this factory.Source§type Future = Pin<Box<dyn Future<Output = Result<<Files as ServiceFactory<ServiceRequest>>::Service, <Files as ServiceFactory<ServiceRequest>>::InitError>>>>
type Future = Pin<Box<dyn Future<Output = Result<<Files as ServiceFactory<ServiceRequest>>::Service, <Files as ServiceFactory<ServiceRequest>>::InitError>>>>
Service instance.gSource§fn new_service(
&self,
_: (),
) -> <Files as ServiceFactory<ServiceRequest>>::Future
fn new_service( &self, _: (), ) -> <Files as ServiceFactory<ServiceRequest>>::Future
Auto Trait Implementations§
impl Freeze for Files
impl !RefUnwindSafe for Files
impl !Send for Files
impl !Sync for Files
impl Unpin for Files
impl !UnwindSafe for Files
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<SF, Req> IntoServiceFactory<SF, Req> for SFwhere
SF: ServiceFactory<Req>,
impl<SF, Req> IntoServiceFactory<SF, Req> for SFwhere
SF: ServiceFactory<Req>,
Source§fn into_factory(self) -> SF
fn into_factory(self) -> SF
Self to a ServiceFactory