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".

  # Add another class with static files in DATA section
  push @{$static->classes}, 'Mojolicious::Plugin::Fun';

  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';

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>.