Mojolicious::Static(3)

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 <http://tools.ietf.org/html/rfc7232> and RFC 7233 <http://tools.ietf.org/html/rfc7233>.

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 these classes need to have already been loaded and added during application startup for files to be detected.

  # 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 "ETag" header before comparing.

last_modified
      last_modified => $epoch

    Add "Last-Modified" header 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.

SEE ALSO
Mojolicious, Mojolicious::Guides, <http://mojolicio.us>.