type Multipart = {
  preamble?: String,
  parts: {
    _?: MultipartPart
  }
}
type MultipartPart = {
  headers?: {
    "Content-Disposition"?: {
      name: String,
      filename?: String
    },
    "Content-Type"?: String
  },
  content: Any
}Multipart Format (Form Data)
MIME Type: multipart/form-data
ID: multipart
DataWeave supports Multipart subtypes, in particular form-data. These formats
enable you to handle several different data parts in a single payload,
regardless of the format each part has. To distinguish the beginning and end of
a part, a boundary is used and metadata for each part can be added through
headers.
DataWeeave represents a Multipart document with the given Object structure:
Examples
The following examples show uses of the Multipart format.
Example: Multipart
This example shows how DataWeave reads simple Multipart content.
Input
The Multipart input serves as the payload to the DataWeave source.
--34b21
Content-Disposition: form-data; name="text"
Content-Type: text/plain
Book
--34b21
Content-Disposition: form-data; name="file1"; filename="a.json"
Content-Type: application/json
{
"title": "Java 8 in Action",
"author": "Mario Fusco",
"year": 2014
}
--34b21
Content-Disposition: form-data; name="file2"; filename="a.html"
Content-Type: text/html
<title> Available for download! </title>
--34b21--Source
The DataWeave script transforms the Multipart input payload to the DataWeave (dw) format.
%dw 2.0
output application/dw
---
payloadOutput
The output shows how the DataWeave (dw) format represents the Multipart input. Note that the raw and content values are  shortened for brevity. The full values are longer.
{
    parts: {
        text: {
            headers: {
                "Content-Disposition": {
                    name: "text",
                    subtype: "form-data"
                },
                "Content-Type": "text/plain"
            },
        content: "Book" as String {
            raw: "Qm9vaw==" as Binary {
                    base: "64"
                },
                encoding: null,
                mediaType: "text/plain",
                mimeType: "text/plain"
            }
        },
        file1: {
            headers: {
                "Content-Disposition": {
                    name: "file1",
                    filename: "a.json",
                    subtype: "form-data"
                },
                "Content-Type": "application/json"
            },
            content: {
                title: "Java 8 in Action",
                author: "Mario Fusco",
                year: 2014
            } as Object {
                raw: "ewogICJ0aXRsZSI6ICJKYXZhI...==" as Binary {
                    base: "64"
                },
                encoding: null,
                mediaType: "application/json",
                mimeType: "application/json"
            }
        },
        file2: {
            headers: {
                "Content-Disposition": {
                    name: "file2",
                    filename: "a.html",
                    subtype: "form-data"
                },
                "Content-Type": "text/html"
            },
            content: "PCFET0NUWVBFIGh0bWw+Cjx0aXRsZT4KI...==" as Binary {
                base: "64"
            }
       }
    }
}Example: Access and Transform Data from Parts
Within a DataWeave script, you can access and transform data from any of the
parts by selecting the parts element. Navigation can be array-based or key-based when parts feature a name to reference them by. The part’s data can be
accessed through the content keyword, while headers can be accessed through
the headers keyword.
Input
This example serves as input to separate DataWeave scripts. shows a raw multipart/form-data payload with a 34b21 boundary consisting of 3 parts:
- 
a text/plainone namedtext
- 
an application/jsonfile (a.json) namedfile1
- 
a text/htmlfile (a.html) namedfile2
--34b21
Content-Disposition: form-data; name="text"
Content-Type: text/plain
Book
--34b21
Content-Disposition: form-data; name="file1"; filename="a.json"
Content-Type: application/json
{
  "title": "Java 8 in Action",
  "author": "Mario Fusco",
  "year": 2014
}
--34b21
Content-Disposition: form-data; name="file2"; filename="a.html"
Content-Type: text/html
<!DOCTYPE html>
<title>
  Available for download!
</title>
--34b21--Example: Generate Multipart Content
You can generate multipart content that DataWeave uses to build an object with a list of parts, each containing its headers and content. The following DataWeave script produces the raw multipart data (previously analyzed) if the HTML data is available in the payload.
%dw 2.0
output multipart/form-data
boundary='34b21'
---
{
  parts : {
    text : {
      headers : {
        "Content-Type": "text/plain"
      },
      content : "Book"
    },
    file1 : {
      headers : {
        "Content-Disposition" : {
            "name": "file1",
            "filename": "a.json"
        },
        "Content-Type" : "application/json"
      },
      content : {
        title: "Java 8 in Action",
        author: "Mario Fusco",
        year: 2014
      }
    },
    file2 : {
      headers : {
        "Content-Disposition" : {
            "filename": "a.html"
        },
        "Content-Type" : payload.^mimeType
      },
      content : payload
    }
  }
}Notice that the key determines the part’s name if the name is not explicitly
provided in the Content-Disposition header, and note that DataWeave can
handle content from supported formats, as well as references to unsupported
ones, such as HTML.
Configuration Properties
DataWeave supports the following configuration properties for the Multipart format.
Reader Properties
The Multipart format accepts properties that provide instructions for reading input data.
| Parameter | Type | Default | Description | 
|---|---|---|---|
| 
 | 
 | 
 | The multipart  | 
| 
 | 
 | This property has no default value. | Sets the default Content-Type to use on parts of the  | 
Writer Properties
The Multipart format accepts properties that provide instructions for writing output data.
| Parameter | Type | Default | Description | 
|---|---|---|---|
| 
 | 
 | 
 | The multipart boundary value. A String to delimit parts. | 
| 
 | 
 | 
 | Size of the buffer writer. | 
| 
 | 
 | 
 | When set to  | 



