---
schema_version: "1"
id: cf1d63eeea49b405a26db4c227b1376abaad5f5389d7401d8c6c4f0976123945
title: マルチパート (フォームデータ) 形式
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/dataweave/2.8/dataweave-formats-multipart.md
canonical_url: https://docs.mulesoft.com/jp/dataweave/2.8/dataweave-formats-multipart
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 230adbcb62f2272a1c31639b2ae36e7563d08e7fe2dd4d43908092d8cd4eadb6
description: MuleSoft Documentation Site
release: "2.8"
latest: false
---
# マルチパート (フォームデータ) 形式

MIME タイプ: `multipart/form-data`

ID: `multipart`

DataWeave ではマルチパートサブタイプ (特に ​`form-data`​) がサポートされます。この形式では、各パートの形式に関係なく、1 つのペイロード内で複数の異なるデータパートを処理できます。パートの開始と終了を区別するには、境界を使用します。各パートのメタデータはヘッダーを介して追加できます。

DataWeave では、特定の ​`Object`​ 構造を使用して、マルチパートドキュメントを表します。

```weave
type Multipart = {
  preamble?: String,
  parts: {
    _?: MultipartPart
  }
}
type MultipartPart = {
  headers?: {
    "Content-Disposition"?: {
      name: String,
      filename?: String
    },
    "Content-Type"?: String
  },
  content: Any
}
```

## [](#examples)例

次の例は、マルチパート形式の使用方法を示しています。

- [例: マルチパート](#example1)
- [例: パートのデータにアクセスして変換する](#example2)
- [例: マルチパートコンテンツを生成する](#example3)
- [例: マルチパートペイロードを反復処理する](#example4)
- [例: ^mediaType および ^mimeType メタデータセレクターの使用](#example5)

### [](#example1)例: マルチパート

次の例は、DataWeave で単純なマルチパートコンテンツを読み取る方法を示しています。

#### [](#入力)入力

マルチパート入力は、DataWeave ソースへのペイロードとして機能します。

```text
--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--
```

#### [](#ソース)ソース

この DataWeave スクリプトは、マルチパート入力ペイロードを DataWeave (dw) 形式に変換します。

```weave
%dw 2.0
output application/dw
---
payload
```

#### [](#出力)出力

この出力は、DataWeave (dw) 形式でマルチパート入力がどのように表されるのかを示しています。​`raw`​ および ​`content`​ 値は、簡潔にするために短縮されています。完全な値はこれよりも長くなります。

```weave
{
    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"
            }
       }
    }
}
```

### [](#example2)例: パートのデータにアクセスして変換する

DataWeave スクリプト内で、​`parts`​ 要素を選択し、任意のパートのデータにアクセスし、変換できます。操作は配列に基づくことができます。また、パートを参照するための名前がパートに設定されている場合は、キーに基づくことができます。パートのデータには ​`content`​ キーワードを介してアクセスでき、ヘッダーには ​`headers`​ キーワードを介してアクセスできます。

#### [](#入力-2)入力

次の例は、個別の DataWeave スクリプトへの入力として機能します。3 つのパートで構成される ​`34b21`​ 境界を含む未加工の ​`multipart/form-data`​ ペイロードを以下に示します。

- `text`​ という名前の ​`text/plain`
- `file1`​ という名前の ​`application/json`​ ファイル (​`a.json`​)
- `file2`​ という名前の ​`text/html`​ ファイル (​`a.html`​)

未加工のマルチパートデータ:

```text
--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--
```

#### [](#ソース-2)ソース

次の DataWeave スクリプトは、入力として未加工の ​`multipart/form-data`​ ペイロードを使用し、​`Book:a.json`​ を生成します。

マルチパートコンテンツの読み取り:

```dataweave
%dw 2.0
output text/plain
---
payload.parts.text.content ++ ':' ++ payload.parts[1].headers.'Content-Disposition'.filename
```

### [](#example3)例: マルチパートコンテンツを生成する

DataWeave がパートのリスト (各パートにヘッダーとコンテンツが含まれる) を含むオブジェクトを構築するマルチパートコンテンツを生成できます。次の DataWeave スクリプトでは、ペイロード内で HTML データを使用できる場合に、(以前に分析した) 未加工のマルチパートデータを生成します。

<table><tbody><tr><td class="icon"><i class="fa icon-note" title="Note"></i></td><td class="content">DataWeave ドキュメントの出力の一貫性を確保するために、この例では ​<code>boundary</code>​ プロパティをハードコード化します。 ただし、多くの場合、DataWeave によってランダムな境界が生成されて出力 MIME タイプに追加されるため、このプロパティをハードコード化する必要はありません。</td></tr></tbody></table>

マルチパートコンテンツの書き込み:

```dataweave
%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
    }
  }
}
```

パートの名前が ​`Content-Disposition`​ ヘッダーに明示的に提供されていない場合は、キーによりパートの名前が決まります。また、DataWeave は、サポートされる形式からのコンテンツを処理できるだけでなく、HTML など、サポートされない形式への参照からコンテンツを処理できます。

次の例は、現在のペイロードをマルチパートフォームデータのファイルパートとして送信する方法を示しています。次のような DataWeave スクリプトを使用する必要があります。

```dataweave
%dw 2.0
input payload application/xml
output multipart/form-data boundary="----myboundary----"
---
{
  parts: {
    filePart: {
      headers: {
        "Content-Disposition": {
          "name": "<NAME>",
          "filename": "<FILE_NAME>.<FILE_EXTENSION>"
        },
        "Content-Type": "<FILE_CONTENT-TYPE>"
      },
      content: payload
    },
    otherJsonPart: {
      content: '{"name": "sampleFile.xml", "sampleFile": {"type": "sample"} }'
    }
  }
}
```

- `boundary`​ は境界値を設定します (例: `"----myboundary----"`​)。
- `<NAME>`​ はファイルのタグ名です (例: `"sampleFile"`​)。
- `<FILE_NAME>.<FILE_EXTENSION>`​ はペイロードのコンテンツを入力するためのファイル名です (例: `"sampleFile.xml"`​)。
- `<FILE_CONTENT-TYPE>`​ は送信するファイルのコンテンツと一致させます (例: `"application/xml"`​)。
- ファイルのコンテンツは現在のペイロードです。

この例には、マルチパートに 2 つのパート (ファイルと ​`otherJsonPart`​) が含まれています。さらにパートを追加する場合は、​`parts:{}`​ セクションの下に次の形式で追加します。

```dataweave
  <PART_NAME>: {
    content: <PART_CONTENT>
  }
```

- `<PART_NAME>`​ は引用符なしのパート名です (例: `json`​)。
- `<PART_CONTENT>`​ はそのパートのコンテンツです (例: `'{"name": "sampleFile.xml", "sampleFile": {"type": "sample"} }'`​)。

次の XML 入力を前提とします。

```xml
<Customers>
	<Customer>
		<Number>1</Number>
		<FirstName>Fred</FirstName>
		<LastName>Landis</LastName>
		<Address>
			<Street>Oakstreet</Street>
			<City>Boston</City>
			<ZIP>23320</ZIP>
			<State>MA</State>
		</Address>
	</Customer>
	<Customer>
		<Number>2</Number>
		<FirstName>Michelle</FirstName>
		<LastName>Butler</LastName>
		<Address>
			<Street>First Avenue</Street>
			<City>San-Francisco</City>
			<ZIP>44324</ZIP>
			<State>CA</State>
		</Address>
	</Customer>
	<Customer>
		<Number>3</Number>
		<FirstName>Ted</FirstName>
		<LastName>Little</LastName>
		<Address>
			<Street>Long Way</Street>
			<City>Los-Angeles</City>
			<ZIP>34424</ZIP>
			<State>CA</State>
		</Address>
	</Customer>
</Customers>
```

DataWeave スクリプトは次のようになります。

```dataweave
%dw 2.0
output multipart/form-data  boundary="----myboundary----"
---
{
  parts: {
    filePart: {
      headers: {
        "Content-Disposition": {
          "name": "test",
          "filename": "sampleFile.xml"
        },
        "Content-Type": "application/xml"
      },
      content: payload
    },
    otherJsonPart: {
      content: '{"name": "sampleFile.xml", "sampleFile": {"type": "sample"} }'
    }
  }
}
```

出力マルチパートは次のようになります。

```multipart
------myboundary----
Content-Type: application/xml
Content-Disposition: form-data; name="test"; filename="sampleFile.xml"

<Customers>
  <Customer>
    <Number>1</Number>
    <FirstName>Fred</FirstName>
    <LastName>Landis</LastName>
    <Address>
      <Street>Oakstreet</Street>
      <City>Boston</City>
      <ZIP>23320</ZIP>
      <State>MA</State>
    </Address>
  </Customer>
  <Customer>
    <Number>2</Number>
    <FirstName>Michelle</FirstName>
    <LastName>Butler</LastName>
    <Address>
      <Street>First Avenue</Street>
      <City>San-Francisco</City>
      <ZIP>44324</ZIP>
      <State>CA</State>
    </Address>
  </Customer>
  <Customer>
    <Number>3</Number>
    <FirstName>Ted</FirstName>
    <LastName>Little</LastName>
    <Address>
      <Street>Long Way</Street>
      <City>Los-Angeles</City>
      <ZIP>34424</ZIP>
      <State>CA</State>
    </Address>
  </Customer>
</Customers>
------myboundary----
Content-Disposition: form-data; name="otherJsonPart"

{"name": "sampleFile.xml", "sampleFile": {"type": "sample"} }
------myboundary------
```

### [](#example4)例: マルチパートペイロードを反復処理する

次の例は、DataWeave がペイロードのすべてのパートを反復処理して各パートを個別に処理する方法を示しています。

### [](#ソース-3)ソース

```dataweave
%dw 2.0
output application/json
var multi = '--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--'
var parsed = read(multi, "multipart/form-data", {boundary:'34b21'})
---
parsed.parts mapObject ((value, key, index) -> {(index): key})
```

### [](#出力-2)出力

```json
{
  "0": "text",
  "1": "file1",
  "2": "file2"
}
```

### [](#example5)例: ^mediaType および ^mimeType メタデータセレクターの使用

`^mimeType`​ セレクターは、パラメーターなしの値の MIME タイプ (​`application/json`​ など) を返します。​`^mediaType`​ セレクターは、対照的に MIME タイプとそれに関連する他のパラメーター (​`application/json;charset=UTF-16`​ など) を返します。

次の例では、マルチパート入力を異なる形式のマルチパート出力に変換する方法を示しています。この DataWeave スクリプトでは、​`^mimeType`​ セレクターと ​`^mediaType`​ セレクターの両方を使用して新しいマルチパートコンテンツを生成します。

### [](#入力-3)入力

マルチパート入力には複数のコンテンツタイプがあります。この場合は、非標準の区切り文字が含まれる ​`application/json`​ と ​`application/csv`​ です。

```text
----------------------------049709565842371278701691
Content-Type: application/json
Content-Disposition: form-data; name="order"

{
"name": "order1",
"id": 123,
"content": "orderContent"
}
----------------------------049709565842371278701691
Content-Type: application/csv;separator=.
Content-Disposition: form-data; name="partner"

partnerName.id
mulesoft.1
----------------------------049709565842371278701691--
```

### [](#ソース-4)ソース

この DataWeave スクリプトでは、​`output multipart/form-data`​ MIME タイプを定義してマルチパート入力をマルチパート出力に変換します。マルチパート出力データには 2 つのパートが含まれます。

- `orderAck`

注文の受信の肯定応答を伴うテキストが含まれます。コンテンツタイプは ​`text/plain`​ です。 ^mimeType\` セレクターは、メッセージのパートとしてコンテンツタイプを記録する場合に役に立ちます。

- `partner`

元のパートナー自体が含まれます。今回はコンテンツタイプが ​`payload.parts..^mediaType`​ である点に注意してください。^mediaType セレクターには、​`application/csv`​ コンテンツを解析する区切り文字も含まれます。

```dataweave
%dw 2.0
input payload multipart boundary='boundary1'
output multipart boundary='test2'
---
{
  parts : {
    orderAck : {
      headers : {
        "Content-Type": "text/plain"
      },
      content : "Order payload of type " ++ payload.parts.order.content.^mimeType ++ " and id " ++ (payload.parts.order.content.id as String) ++ " received. Receipt available."
    },
    partner: {
      headers : {
        "Content-Type": payload.parts.partner.content.^mediaType
      },
      content : payload.parts.partner.content
    }
  }
}
```

### [](#出力-3)出力

```text
--test2
Content-Type: text/plain
Content-Disposition: form-data; name="orderAck"

Order payload of type application/json and id 123 received. Receipt available.
--test2
Content-Type: application/csv;separator=.
Content-Disposition: form-data; name="partner"

partnerName.id
mulesoft.1
--test2--
```

## [](#properties)Configuration のプロパティ

DataWeave では、この形式の以下の設定プロパティがサポートされています。

### [](#reader_properties)Reader のプロパティ

この形式は、入力データを読み取るための指示を提供するプロパティを受け入れます。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 50.0002%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">パラメーター</th>
<th class="tableblock halign-left valign-top">型</th>
<th class="tableblock halign-left valign-top">デフォルト</th>
<th class="tableblock halign-left valign-top">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boundary</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>null</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>マルチパートの ​<code>boundary</code>​ 値。パートを区切る文字列です。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>defaultContentType</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>'application/octet-stream'</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>multipart/*</code>​ 形式のパートで使用するデフォルトのコンテンツタイプを設定します。設定すると、このプロパティは​<a href="https://docs.mulesoft.com/jp/dataweave/2.8/dataweave-system-properties" class="xref page">システムプロパティ</a>​ ​<code>com.mulesoft.dw.multipart.defaultContentType</code>​ の設定よりも優先されます。</p>
</div>
<div class="paragraph">
<p><em>2021 年 8 月リリースの Mule 4.3.0-20210719 の DataWeave 2.3 (2.3.0-20210720) で導入されました。</em>​</p>
</div></div></td>
</tr>
</tbody>
</table>

### [](#writer_properties)Writer のプロパティ

この形式は、出力データを書き込むための指示を提供するプロパティを受け入れます。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 16.6666%;">
<col style="width: 50.0002%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">パラメーター</th>
<th class="tableblock halign-left valign-top">型</th>
<th class="tableblock halign-left valign-top">デフォルト</th>
<th class="tableblock halign-left valign-top">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boundary</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>null</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>マルチパートの ​<code>boundary</code>​ 値。パートを区切る文字列です。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>bufferSize</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Number</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>8192</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>バッファライターのサイズ (バイト)。値は ​<code>8</code>​ よりも大きい必要があります。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>deferred</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>true</code>​ に設定すると、出力をデータストリームとして生成し、スクリプトの実行は生成されたコンテンツがコンシュームされるまで延期されます。</p>
</div>
<div class="paragraph">
<p>有効な値は、​<code>true</code>​ または ​<code>false</code>​ です。</p>
</div></div></td>
</tr>
</tbody>
</table>

## [](#mime_types)サポートされる MIME タイプ

この形式では、次の MIME タイプがサポートされます。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 100%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">MIME タイプ</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>multipart/*</code></p></td>
</tr>
</tbody>
</table>