NAME
Mojolicious::Static - Serve static files
SYNOPSIS
use Mojolicious::Static;
my $static = Mojolicious::Static->new;
push @{$static->classes}, 'MyApp::Controller::Foo';
push @{$static->paths}, '/home/sri/public';
DESCRIPTION
Mojolicious::Static is a static file server with Range, If-Modified-Since and If-None-Match support, based on RFC 7232 and RFC 7233.
ATTRIBUTES
Mojolicious::Static implements the following attributes.
classes
my $classes = $static->classes;
$static = $static->classes(['main']);
Classes to use for finding files in DATA sections with Mojo::Loader, first one has the highest precedence, defaults to main. Only files with exactly one extension will be used, like index.html. Note that for files to be detected, these classes need to have already been loaded and added before "warmup" is called, which usually happens automatically during application startup.
# Add another class with static files in DATA section
push @{$static->classes}, 'Mojolicious::Plugin::Fun';
# Add another class with static files in DATA section and higher precedence
unshift @{$static->classes}, 'Mojolicious::Plugin::MoreFun';
paths
my $paths = $static->paths;
$static = $static->paths(['/home/sri/public']);
Directories to serve static files from, first one has the highest precedence.
# Add another "public" directory
push @{$static->paths}, '/home/sri/public';
# Add another "public" directory with higher precedence
unshift @{$static->paths}, '/home/sri/themes/blue/public';
METHODS
Mojolicious::Static inherits all methods from Mojo::Base and implements the following new ones.
dispatch
my $bool = $static->dispatch(Mojolicious::Controller->new);
Serve static file for Mojolicious::Controller object.
file
my $asset = $static->file('images/logo.png');
my $asset = $static->file('../lib/MyApp.pm');
Build Mojo::Asset::File or Mojo::Asset::Memory object for a file, relative to "paths" or from "classes", or return undef if it doesn't exist. Note that this method does not protect from traversing to parent directories.
my $content = $static->file('foo/bar.html')->slurp;
is_fresh
my $bool = $static->is_fresh(Mojolicious::Controller->new, {etag => 'abc'});
Check freshness of request by comparing the If-None-Match and If-Modified-Since request headers to the ETag and Last-Modified response headers.
These options are currently available:
- etag
-
etag => 'abc'Add
ETagheader before comparing. - last_modified
-
last_modified => $epochAdd
Last-Modifiedheader before comparing.
serve
my $bool = $static->serve(Mojolicious::Controller->new, 'images/logo.png');
my $bool = $static->serve(Mojolicious::Controller->new, '../lib/MyApp.pm');
Serve a specific file, relative to "paths" or from "classes". Note that this method does not protect from traversing to parent directories.
serve_asset
$static->serve_asset(Mojolicious::Controller->new, Mojo::Asset::File->new);
Serve a Mojo::Asset::File or Mojo::Asset::Memory object with Range, If-Modified-Since and If-None-Match support.
warmup
$static->warmup;
Prepare static files from "classes" for future use.