Mojolicious::Static - Serve static files
use Mojolicious::Static; my $static = Mojolicious::Static->new; push @{$static->classes}, 'MyApp::Controller::Foo'; push @{$static->paths}, '/home/sri/public';
Mojolicious::Static is a static file server with Range, If-Modified-Since and If-None-Match support, based on RFC 7232 and RFC 7233.
Range
If-Modified-Since
If-None-Match
Mojolicious::Static implements the following attributes.
my $dir = $static->asset_dir; $static = $static->asset_dir('assets');
Subdirectory used for all static assets, defaults to assets.
assets
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.
DATA
main
index.html
# 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';
my $extra = $static->extra; $static = $static->extra({'foo/bar.txt' => '/home/sri/myapp/bar.txt'});
Paths for extra files to be served from locations other than "paths", such as the images used by the built-in exception and not found pages. Note that extra files are only served if no better alternative could be found in "paths" and "classes".
# Remove built-in favicon delete $static->extra->{'favicon.ico'};
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';
my $prefix = $static->prefix; $static = $static->prefix('/static');
Prefix to use for all static files, defaults to undef. This can be very useful for production deployments where the reverse proxy server should take over serving static files.
undef
Mojolicious::Static inherits all methods from Mojo::Base and implements the following new ones.
my $path = $static->asset_path('/app.js');
Get static asset path.
my $bool = $static->dispatch(Mojolicious::Controller->new);
Serve static file for Mojolicious::Controller object.
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 uses a relative path, but does not protect from traversing to parent directories.
my $content = $static->file('foo/bar.html')->slurp;
my $path = $static->file_path('/index.html');
Get static file path with "prefix" if it has been configured.
my $bool = $static->is_fresh(Mojolicious::Controller->new, {etag => 'abc'}); my $bool = $static->is_fresh( Mojolicious::Controller->new, {etag => 'W/"def"'});
Check freshness of request by comparing the If-None-Match and If-Modified-Since request headers to the ETag and Last-Modified response headers.
ETag
Last-Modified
These options are currently available:
etag => 'abc' etag => 'W/"abc"'
Add ETag header before comparing.
last_modified => $epoch
Add Last-Modified header before comparing.
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 uses a relative path, but does not protect from traversing to parent directories.
$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.
$static->warmup();
Prepare static files from "classes" and static assets for future use.
Mojolicious, Mojolicious::Guides, https://mojolicious.org.
To install Mojolicious, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Mojolicious
CPAN shell
perl -MCPAN -e shell install Mojolicious
For more information on module installation, please visit the detailed CPAN module installation guide.