aboutsummaryrefslogtreecommitdiffstats
path: root/examples/upload/src
diff options
context:
space:
mode:
Diffstat (limited to 'examples/upload/src')
-rw-r--r--examples/upload/src/upload.app.src15
-rw-r--r--examples/upload/src/upload_app.erl25
-rw-r--r--examples/upload/src/upload_handler.erl21
-rw-r--r--examples/upload/src/upload_sup.erl23
4 files changed, 84 insertions, 0 deletions
diff --git a/examples/upload/src/upload.app.src b/examples/upload/src/upload.app.src
new file mode 100644
index 0000000..2325935
--- /dev/null
+++ b/examples/upload/src/upload.app.src
@@ -0,0 +1,15 @@
+%% Feel free to use, reuse and abuse the code in this file.
+
+{application, upload, [
+ {description, "Cowboy multipart upload example."},
+ {vsn, "1"},
+ {modules, []},
+ {registered, [upload_sup]},
+ {applications, [
+ kernel,
+ stdlib,
+ cowboy
+ ]},
+ {mod, {upload_app, []}},
+ {env, []}
+]}.
diff --git a/examples/upload/src/upload_app.erl b/examples/upload/src/upload_app.erl
new file mode 100644
index 0000000..5285c0f
--- /dev/null
+++ b/examples/upload/src/upload_app.erl
@@ -0,0 +1,25 @@
+%% Feel free to use, reuse and abuse the code in this file.
+
+%% @private
+-module(upload_app).
+-behaviour(application).
+
+%% API.
+-export([start/2]).
+-export([stop/1]).
+
+%% API.
+start(_Type, _Args) ->
+ Dispatch = cowboy_router:compile([
+ {'_', [
+ {"/", cowboy_static, {priv_file, upload, "index.html"}},
+ {"/upload", upload_handler, []},
+ {"/files/[...]", cowboy_static, {priv_dir, upload, "files"}}
+ ]}
+ ]),
+ {ok, _} = cowboy:start_http(http, 100, [{port, 8080}],
+ [{env, [{dispatch, Dispatch}]}]),
+ upload_sup:start_link().
+
+stop(_State) ->
+ ok.
diff --git a/examples/upload/src/upload_handler.erl b/examples/upload/src/upload_handler.erl
new file mode 100644
index 0000000..0895d78
--- /dev/null
+++ b/examples/upload/src/upload_handler.erl
@@ -0,0 +1,21 @@
+-module(upload_handler).
+-behaviour(cowboy_http_handler).
+
+-export([init/3]).
+-export([handle/2]).
+-export([terminate/3]).
+
+init(_, Req, _Opts) ->
+ {ok, Req, undefined}.
+
+handle(Req, State) ->
+ {ok, Headers, Req2} = cowboy_req:part(Req),
+ {ok, Data, Req3} = cowboy_req:part_body(Req2),
+ {file, <<"inputfile">>, Filename, ContentType, _TE}
+ = cow_multipart:form_data(Headers),
+ io:format("Received file ~p of content-type ~p as follow:~n~p~n~n",
+ [Filename, ContentType, Data]),
+ {ok, Req3, State}.
+
+terminate(_Reason, _Req, _State) ->
+ ok.
diff --git a/examples/upload/src/upload_sup.erl b/examples/upload/src/upload_sup.erl
new file mode 100644
index 0000000..0d03503
--- /dev/null
+++ b/examples/upload/src/upload_sup.erl
@@ -0,0 +1,23 @@
+%% Feel free to use, reuse and abuse the code in this file.
+
+%% @private
+-module(upload_sup).
+-behaviour(supervisor).
+
+%% API.
+-export([start_link/0]).
+
+%% supervisor.
+-export([init/1]).
+
+%% API.
+
+-spec start_link() -> {ok, pid()}.
+start_link() ->
+ supervisor:start_link({local, ?MODULE}, ?MODULE, []).
+
+%% supervisor.
+
+init([]) ->
+ Procs = [],
+ {ok, {{one_for_one, 10, 10}, Procs}}.