cowboy_req:read_part_body(3)

NAME

cowboy_req:read_part_body - Read the current part's body

DESCRIPTION
    read_part_body(Req :: cowboy_req:req())
        -> read_part_body(Req, #{})

    read_part_body(Req :: cowboy_req:req(), Opts)
        -> {ok,   Data :: binary(), Req}
         | {more, Data :: binary(), Req}

    Opts :: cowboy_req:read_body_opts()

Read the body of the current part of the multipart message.

This function reads the request body and parses it as multipart. Each parts of a multipart representation have their own headers and body. This function returns the body of the current part. Examples of multipart media types are multipart/form-data and multipart/byteranges.

This function reads a chunk of the part's body. A more tuple is returned when more data remains to be read. Call the function repeatedly until an ok tuple is returned to read the entire body.

Once a part has been read, it can not be read again.

Once the body has been read, Cowboy sets the content-length header if it was not previously provided.

ARGUMENTS

Req
    The Req object.

Opts
    A map of body reading options. Please refer to cowboy_req:read_body(3) for details about each option.

    This function uses the same default options as the cowboy_req:read_body(3) function.

RETURN VALUE

A more tuple is returned when there are more data to be read.

An ok tuple is returned when there are no more data to be read.

The data is always returned as a binary.

The Req object returned in the tuple must be used from that point onward. It contains a more up to date representation of the request. For example it may have an added content-length header once the body has been read.

CHANGELOG
    • 2.0: Function introduced. Replaces part_body/1,2.

EXAMPLES

Read a full part's body
    stream_body(Req0, Acc) ->
        case cowboy_req:read_part_body(Req0) of
            {more, Data, Req} ->
                stream_body(Req, << Acc/binary, Data/binary >>);
            {ok, Data, Req} ->
                {ok, << Acc/binary, Data/binary >>, Req}
        end.

Ensure a part's body is smaller than 64KB
    {ok, Body, Req} = cowboy_req:read_part_body(Req0, #{length => 64000}).

SEE ALSO

cowboy_req(3), cowboy_req:has_body(3), cowboy_req:body_length(3), cowboy_req:read_body(3), cowboy_req:read_urlencoded_body(3), cowboy_req:read_and_match_urlencoded_body(3), cowboy_req:read_part(3)