wmexamples / src / static_resource.erl

%% @author Bryan Fink
%% @doc Serve static content from disk
%%      Note: for a much more full-featured filesystem
%%      resource, have a look at demo_fs_resource.erl
%%      in webmachine's demo directory.
-module(static_resource).
-export([init/1,
	 content_types_provided/2,
	 resource_exists/2,
	 content/2]).

-record(context, {root, filepath}).

-include_lib("webmachine/include/webmachine.hrl").

init(Opts) ->
    {ok, #context{root=proplists:get_value(root, Opts)}}.

content_types_provided(RD, Context) ->
    Path = wrq:disp_path(RD),
    Mime = webmachine_util:guess_mime(Path),
    {[{Mime, content}], RD, Context}.

resource_exists(RD, Context=#context{root=Root}) ->
    FP = filename:join([Root, wrq:disp_path(RD)]),
    case filelib:is_regular(FP) of
	true ->
	    {true, RD, Context#context{filepath=FP}};
	_ ->
	    {false, RD, Context}
    end.

content(RD, Context=#context{filepath=FP}) ->
    {ok, Data} = file:read_file(FP),
    {Data, RD, Context}.
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.