Struct Files

Source
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

Source

pub fn new<T: Into<PathBuf>>(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.

Source

pub fn show_files_listing(self) -> Self

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.

Source

pub fn redirect_to_slash_directory(self) -> Self

Redirects to a slash-ended path when browsing a directory.

By default never redirect.

Source

pub fn files_listing_renderer<F>(self, f: F) -> Self
where for<'r, 's> F: Fn(&'r Directory, &'s HttpRequest) -> Result<ServiceResponse, Error> + 'static,

Set custom directory renderer.

Source

pub fn mime_override<F>(self, f: F) -> Self
where F: Fn(&Name<'_>) -> DispositionType + 'static,

Specifies MIME override callback.

Source

pub fn path_filter<F>(self, f: F) -> Self
where F: Fn(&Path, &RequestHead) -> bool + 'static,

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)
});
Source

pub fn index_file<T: Into<String>>(self, index: T) -> Self

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.

Source

pub fn read_mode_threshold(self, size: u64) -> Self

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.

Source

pub fn use_etag(self, value: bool) -> Self

Specifies whether to use ETag or not.

Default is true.

Source

pub fn use_last_modified(self, value: bool) -> Self

Specifies whether to use Last-Modified or not.

Default is true.

Source

pub fn prefer_utf8(self, value: bool) -> Self

Specifies whether text responses should signal a UTF-8 encoding.

Default is false (but will default to true in a future version).

Source

pub fn guard<G: Guard + 'static>(self, guard: G) -> Self

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"))
);
Source

pub fn method_guard<G: Guard + 'static>(self, guard: G) -> Self

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.

Source

pub fn disable_content_disposition(self) -> Self

Disable Content-Disposition header.

By default Content-Disposition` header is enabled.

Source

pub fn default_handler<F, U>(self, f: F) -> Self
where 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))
    }));
Source

pub fn use_hidden_files(self) -> Self

Enables serving hidden files and directories, allowing a leading dots in url fragments.

Trait Implementations§

Source§

impl Clone for Files

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Files

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl HttpServiceFactory for Files

Source§

fn register(self, config: &mut AppService)

Source§

impl ServiceFactory<ServiceRequest> for Files

Source§

type Response = ServiceResponse

Responses given by the created services.
Source§

type Error = Error

Errors produced by the created services.
Source§

type Config = ()

Service factory configuration.
Source§

type Service = FilesService

The kind of Service created by this factory.
Source§

type InitError = ()

Errors potentially raised while building a service.
Source§

type Future = Pin<Box<dyn Future<Output = Result<<Files as ServiceFactory<ServiceRequest>>::Service, <Files as ServiceFactory<ServiceRequest>>::InitError>>>>

The future of the Service instance.g
Source§

fn new_service(&self, _: ()) -> Self::Future

Create and return a new service asynchronously.

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<SF, Req> IntoServiceFactory<SF, Req> for SF
where SF: ServiceFactory<Req>,

Source§

fn into_factory(self) -> SF

Convert Self to a ServiceFactory
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SF, Req> ServiceFactoryExt<Req> for SF
where SF: ServiceFactory<Req>,

Source§

fn map<F, R>(self, f: F) -> MapServiceFactory<Self, F, Req, R>
where Self: Sized, F: FnMut(Self::Response) -> R + Clone,

Map this service’s output to a different type, returning a new service of the resulting type.
Source§

fn map_err<F, E>(self, f: F) -> MapErrServiceFactory<Self, Req, F, E>
where Self: Sized, F: Fn(Self::Error) -> E + Clone,

Map this service’s error to a different error, returning a new service.
Source§

fn map_init_err<F, E>(self, f: F) -> MapInitErr<Self, F, Req, E>
where Self: Sized, F: Fn(Self::InitError) -> E + Clone,

Map this factory’s init error to a different error, returning a new service.
Source§

fn and_then<I, SF1>(self, factory: I) -> AndThenServiceFactory<Self, SF1, Req>
where Self: Sized, Self::Config: Clone, I: IntoServiceFactory<SF1, Self::Response>, SF1: ServiceFactory<Self::Response, Config = Self::Config, Error = Self::Error, InitError = Self::InitError>,

Call another service after call to this one has resolved successfully.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,