Skip to content

Multipart

v0.2

Multipart is a way of forming HTTP requests or responses to contain multiple distinct parts.

Such an approach allows a request to contain multiple different pieces of data with potentially conflicting data types in a single response payload.
It is typically used either in HTML forms, or when uploading multiple files.

How multipart messages work

The structure of a multipart request is typically consistent of:

  • A Header: Typically multipart/form-data;boundary=<boundary>, This defines the HTTP message as being multipart, as well as defining the separator used to distinguish the different parts.
  • 1 or more parts:
    • --<boundary>
    • Part header: typically content-disposition: mime/type; name="<fieldname>" (mime/type should be replaced with the actual mime-type), can also contain a filename property (separated from the rest by a ; and structured similarly to the name property)
    • Value
  • --<boundary>--

Multipart messages in Crow

Crow supports multipart requests and responses though crow::multipart::message and crow::multipart::message_view, where crow::multipart::message owns the contents of the message and crow::multipart::message_view stores views into its parts.
A message can be created either by defining the headers, boundary, and individual parts and using them to create the message. or simply by reading a crow::request.

Once a multipart message has been made, the individual parts can be accessed throughout msg.parts, parts is an std::vector.

v1.0

Part headers are organized in a similar way to request and response headers, and can be retrieved via crow::multipart::get_header_object("header-key"). This function returns a crow::multipart::header object for owning message and crow::multipart::header_view for non-owning message.

The message's individual body parts can be accessed by name using msg.get_part_by_name("part-name").

For more info on Multipart messages, go here