http_multipart_stream.erl 767 B

123456789101112131415161718192021222324252627282930313233
  1. %% Feel free to use, reuse and abuse the code in this file.
  2. -module(http_multipart_stream).
  3. -behaviour(cowboy_http_handler).
  4. -export([init/3, handle/2, terminate/3]).
  5. init(_, Req, []) ->
  6. {ok, Req, undefined}.
  7. handle(Req, State) ->
  8. Req2 = multipart(Req),
  9. {ok, cowboy_req:reply(200, Req2), State}.
  10. terminate(_, _, _) ->
  11. ok.
  12. multipart(Req) ->
  13. case cowboy_req:part(Req) of
  14. {ok, [{<<"content-length">>, BinLength}], Req2} ->
  15. Length = list_to_integer(binary_to_list(BinLength)),
  16. {Length, Req3} = stream_body(Req2, 0),
  17. multipart(Req3);
  18. {done, Req2} ->
  19. Req2
  20. end.
  21. stream_body(Req, N) ->
  22. case cowboy_req:part_body(Req) of
  23. {ok, Data, Req2} ->
  24. {N + byte_size(Data), Req2};
  25. {more, Data, Req2} ->
  26. stream_body(Req2, N + byte_size(Data))
  27. end.