happstack-server-6.6.2: Web related tools and services.

Safe HaskellNone

Happstack.Server.FileServe

Contents

Description

functions for serving static files from the disk

Synopsis

Serving Functions

data Browsing Source

Instances

Enum Browsing 
Eq Browsing 
Data Browsing 
Ord Browsing 
Read Browsing 
Show Browsing 
Typeable Browsing 

serveDirectorySource

Arguments

:: (WebMonad Response m, ServerMonad m, FilterMonad Response m, MonadIO m, MonadPlus m) 
=> Browsing

allow directory browsing

-> [FilePath]

index file names, in case the requested path is a directory

-> FilePath

file/directory to serve

-> m Response 

Serve files and directories from a directory and its subdirectories using sendFile.

Usage:

 serveDirectory EnableBrowsing ["index.html"] "path/to/files/on/disk"

If the requested path does not match a file or directory on the disk, then serveDirectory calls mzero.

If the requested path is a file then the file is served normally.

If the requested path is a directory, then the result depends on what the first two arguments to the function are.

The first argument controls whether directory browsing is enabled.

The second argument is a list of index files (such as index.html).

When a directory is requested, serveDirectory will first try to find one of the index files (in the order they are listed). If that fails, it will show a directory listing if EnableBrowsing is set, otherwise it will return forbidden "Directory index forbidden".

Here is an explicit list of all the possible outcomes when the argument is a (valid) directory:

DisableBrowsing, empty index file list

This will always return, forbidden "Directory index forbidden"

DisableBrowsing, non-empty index file list
  1. If an index file is found it will be shown.
  2. Otherwise returns, forbidden "Directory index forbidden"
EnableBrowsing, empty index file list

Always shows a directory index.

EnableBrowsing, non-empty index file list
  1. If an index file is found it will be shown
  2. Otherwise shows a directory index

see also: defaultIxFiles, serveFile

serveFileSource

Arguments

:: (ServerMonad m, FilterMonad Response m, MonadIO m, MonadPlus m) 
=> (FilePath -> m String)

function for determining content-type of file. Typically asContentType or guessContentTypeM

-> FilePath

path to the file to serve

-> m Response 

Serve a single, specified file. The name of the file being served is specified explicity. It is not derived automatically from the Request url.

example 1:

Serve as a specific content-type:

 serveFile (asContentType "image/jpeg") "/srv/data/image.jpg"

example 2:

Serve guessing the content-type from the extension:

 serveFile (guessContentTypeM mimeTypes) "/srv/data/image.jpg"

If the specified path does not exist or is not a file, this function will return mzero.

WARNING: No security checks are performed.

NOTE: alias for serveFileUsing filePathSendFile

Content-Type / Mime-Type

type MimeMap = Map String StringSource

a Map from file extensions to content-types

example:

 myMimeMap :: MimeMap
 myMimeMap = Map.fromList [("gz","application/x-gzip"), ... ]

see also: mimeTypes

mimeTypes :: MimeMapSource

Ready collection of common mime types. Except for the first two entries, the mappings come from an Ubuntu 8.04 /etc/mime.types file.

asContentTypeSource

Arguments

:: Monad m 
=> String

the content-type to return

-> FilePath -> m String 

returns a specific content type, completely ignoring the FilePath argument.

Use this with serveFile if you want to explicitly specify the content-type.

see also: guessContentTypeM, serveFile

guessContentTypeM :: Monad m => MimeMap -> FilePath -> m StringSource

try to guess the content-type of a file based on its extension

defaults to application/octet-stream if no match was found.

Useful as an argument to serveFile

see also: guessContentType, serveFile

Index Files

defaultIxFiles :: [FilePath]Source

a list of common index files. Specifically: index.html, index.xml, index.gif

Typically used as an argument to serveDiretory.

Deprecated

fileServeSource

Arguments

:: (WebMonad Response m, ServerMonad m, FilterMonad Response m, MonadIO m, MonadPlus m) 
=> [FilePath]

index file names, in case the requested path is a directory

-> FilePath

file/directory to serve

-> m Response 

Serve files from a directory and its subdirectories using sendFile.

Usage:

 fileServe ["index.html"] "path/to/files/on/disk"

fileServe does not support directory browsing. See serveDirectory

DEPRECATED: use serveDirectory instead.

Note:

The list of index files ["index.html"] is only used to determine what file to show if the user requests a directory. You *do not* need to explicitly list all the files you want to serve.