http_multipart_stream.erl 632 B

123456789101112131415161718192021222324252627
  1. %% Feel free to use, reuse and abuse the code in this file.
  2. -module(http_multipart_stream).
  3. -export([init/2]).
  4. init(Req, Opts) ->
  5. Req2 = multipart(Req),
  6. {ok, cowboy_req:reply(200, Req2), Opts}.
  7. multipart(Req) ->
  8. case cowboy_req:read_part(Req) of
  9. {ok, [{<<"content-length">>, BinLength}], Req2} ->
  10. Length = binary_to_integer(BinLength),
  11. {Length, Req3} = stream_body(Req2, 0),
  12. multipart(Req3);
  13. {done, Req2} ->
  14. Req2
  15. end.
  16. stream_body(Req, N) ->
  17. case cowboy_req:read_part_body(Req) of
  18. {ok, Data, Req2} ->
  19. {N + byte_size(Data), Req2};
  20. {more, Data, Req2} ->
  21. stream_body(Req2, N + byte_size(Data))
  22. end.