http_multipart_stream.erl 787 B

12345678910111213141516171819202122232425262728293031323334
  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, Req3} = cowboy_req:reply(200, Req2),
  10. {ok, Req3, State}.
  11. terminate(_, _, _) ->
  12. ok.
  13. multipart(Req) ->
  14. case cowboy_req:part(Req) of
  15. {ok, [{<<"content-length">>, BinLength}], Req2} ->
  16. Length = list_to_integer(binary_to_list(BinLength)),
  17. {Length, Req3} = stream_body(Req2, 0),
  18. multipart(Req3);
  19. {done, Req2} ->
  20. Req2
  21. end.
  22. stream_body(Req, N) ->
  23. case cowboy_req:part_body(Req) of
  24. {ok, Data, Req2} ->
  25. {N + byte_size(Data), Req2};
  26. {more, Data, Req2} ->
  27. stream_body(Req2, N + byte_size(Data))
  28. end.