Main Content

matlab.net.http.io.MultipartProvider クラス

名前空間: matlab.net.http.io
スーパークラス: matlab.net.http.io.ContentProvider

マルチパート/混在 HTTP メッセージを送信する ContentProvider

説明

このプロバイダーはマルチパート HTTP メッセージの作成で役立ちます。

既定の Content-Type は "multipart/mixed" です。メッセージのペイロードには任意の数のパートが含まれ、各パートにはそのパートを記述する独自のヘッダーが含まれています。マルチパート メッセージの詳細については、Internet Engineering Task Force (IETF®) Web サイトで RFC 2046、セクション 5.1 を参照してください。

このプロバイダーは、サーバーがマルチパート/混在メッセージを受け入れることが分かっている場合にのみ直接使用します。通常、マルチパート メッセージを受け入れるサーバーでは、代わりにサブクラス MultipartFormProvider で実装される "multipart/form-data" を必要とします。サブクラスを使用して他のマルチパート タイプを実装できます。

matlab.net.http.io.MultipartProvider クラスは handle クラスです。

サブクラスの作成

マルチパート メッセージの各パートは、RequestMessage.Body で許可される任意の形式のデータとして、またはデータを作成する ContentProvider として指定できます。パーツにデータを提供するために使用する ContentProvider オブジェクトはデリゲートと呼ばれる一方、この MultipartProvider は最上位レベルのプロバイダーです。一般に、どの ContentProvider もデリゲートとして適切です。MultipartProvider はメッセージの送信中に各デリゲートを順に呼び出し、completestart など、そのメソッドを呼び出すため、デリゲートは通常、メッセージ全体に対してではなく、1 つのパートに対して内容を提供していることを覚えておく必要はありません。

このプロバイダーは RequestMessage を常にチャンク化された状態で送信するため、Content-Length ヘッダー フィールドをメッセージまたは任意のパートのヘッダーに含めません。MultipartProvider がパートを送信する前に各デリゲートの expectedContentLength メソッドを呼び出す間、Content-Length フィールドを作成するためではなく、長さを強制するために戻り値 (空でない場合) のみを使用します。デリゲートで Content-Length フィールドをパートに表示させない場合、Header プロパティにそのようなフィールドを明示的に挿入しなければなりません。MATLAB® で提供されるいずれの ContentProvider サブクラスもこの処理を行いません。

作成

説明

provider = MultipartProvider(part1,...,partN) は指定したパートを指定した順序で HTTP 要求で送信する MultipartProvider を作成します。既定では、このプロバイダーはメッセージの Content-Type を "multipart/mixed" に設定しますが、サブクラスは Subtype プロパティを設定してサブタイプを変更できます。コンストラクターは Parts プロパティの cell 配列の要素を各 part1,...,partN 引数に設定します。

プロパティ

すべて展開する

パブリック プロパティ

メッセージ本文のパーツ。これらの 1 つ以上の値の cell 配列として指定します。

ContentProvider オブジェクト

MultipartProvider はパートの作成を指定したプロバイダー (デリゲートと呼ばれる) にデリゲートし、パートに関するヘッダー情報を取得する完全なメソッドと、データを取得する getData メソッドを呼び出します。デリゲートの Header プロパティは、パートのヘッダーに使用されます。ここでは ContentProvider の任意のサブクラスを指定できます。パートの終端はヘッダー フィールドではなく、boundary string で指定されるため、通常、デリゲートは内容の長さを指定したり、expectedContentLength メソッドを実装しません。そのメソッドが空でない値を返すように実装される場合、値は Content-Length フィールドを作成するためではなく、内容の長さを強制する目的のみで使用されます。

RequestMessage オブジェクト

MultipartProviderRequestMessageHeader および Body をパートとして送信します。本文の Payload プロパティが設定されると、生のペイロードに使用されます。それ以外の場合、本文の Data プロパティは、MessageBody.Data の説明と同じように、そのタイプまたは Header 内の Content-Type フィールドに基づいて変換されます。このオプションは、送信するデータがあり、MATLAB が通常 RequestMessage の送信時に行う既定の処理をそのデータで活用する場合に便利です。これにより、ContentProvider サブクラスを記述せずに、パートの Header として使用されるようにカスタム ヘッダー フィールドを要求で指定し、データの変換方法を制御することができます。RequestMessage.RequestLine プロパティは無視されます。

MessageBody オブジェクト

MessageBody は Content-Type フィールドをもたない RequestMessage に存在するかのように処理されます。このオプションは、型に基づいたデータの既定の処理が十分であり、パートにカスタム ヘッダー フィールドを指定する必要がない場合に役立ちます。MATLAB は、データの型に基づいてパートに Content-Type フィールドを挿入します。変換ルールの詳細については、MessageBody.Data を参照してください。

ContentProvider オブジェクト、RequestMessage オブジェクト、MessageBody オブジェクトの配列

配列の各要素をパートとして扱います。cell 配列ではありません。

getData メソッドのハンドル

このメソッドは ContentProvider.getData のシグネチャをもたなければなりません。この場合、パートの Content-Type は "application/octet-stream" に設定されるため、このオプションはバイナリ データの送信に役立ちます。このオプションを使用する場合、カスタム ヘッダー フィールドをパートに指定することはできません。

その他のタイプ

タイプが前述したどのタイプにも一致せず、関数ハンドルでもない場合、MessageBodyData プロパティに存在するかのように扱われます。MessageBody タイプの説明を参照してください。

属性:

GetAccess
public
SetAccess
public
Dependent
true

メッセージまたはパートのヘッダー フィールド。1 つ以上の matlab.net.http.HeaderField オブジェクトのベクトルとして指定されます。

このプロパティはサブクラスの作成にのみ使用されます。このプロパティは、プロバイダーの complete を呼び出す前に MATLAB で設定されます。マルチパート メッセージ以外については、このプロパティは、MATLAB によって matlab.net.http.field.GenericFields や値が空のフィールドを除いた Request.Header の内容に初期化されます。ContentProvider では、送信するデータを示すヘッダー フィールドを追加したり、メッセージの既存のヘッダー フィールドにパラメーターを追加したりする場合にこのプロパティを使用します。MultipartProvider のデリゲートでは、このプロパティは、MATLAB によってデリゲート元のプロバイダーが挿入するパート用のヘッダー フィールドに初期化されます。これらのフィールドはデリゲートで変更が可能です。

マルチパート メッセージ以外では、プロバイダーの complete メソッドから戻ると、MATLAB はこのプロパティを読み取って、その内容を Request のヘッダーにマージします。この Header に含まれるフィールドの NamesRequest.Header にない場合、Request.Header の末尾に追加されます。この Header に含まれるフィールドの NameRequest.Header に含まれるフィールドと同じで、どちらの Values も空でない場合は、次のように処理されます。

  • Request.Header のフィールドが GenericField の場合、Header のフィールドは無視されます。

  • Request.Header のフィールドが GenericField でない場合、Header のフィールドに置き換えられます。

これらの一方または両方の Value が空の場合は、Request.Header からフィールドが削除され、メッセージの正常な終了時にも追加されません。

MultipartProvider のデリゲートの場合は、この Header の内容全体がパートのヘッダーとして使用されます。マルチパート デリゲートでは、Request.Header にその Header に付随する任意のフィールドが含まれていると想定してはなりません。プロバイダーがマルチパート デリゲートであるかどうかは MyDelegatorMultipartProvider かどうかを確認すれば特定できますが、このテストが必要になることはほとんどありません。

このプロパティが MATLAB で読み取られるのは、プロバイダーの complete メソッドの呼び出しから戻るときだけです。MATLAB で start が呼び出された後は、この配列に対する変更は無視されます。

クラスを作成するときは、スーパークラスで complete を呼び出す前に、この (complete メソッド内の) Headerにサブクラスがフィールドを追加済みの場合があることを認識しておく必要があります。それらのフィールドは残しておいて、同じ名前のフィールドを追加しないようにすることを推奨します。ただし、フィールドへのパラメーターの追加は可能です。たとえば、既存の Content-Type フィールドに charset パラメーターがない場合、スーパークラスで追加できます。

属性:

GetAccess
public
SetAccess
public

チャンク転送コーディングを強制するかどうかを示します。boolean として指定されます。これはサブクラスの作成にのみ関係するプロパティで、マルチパート デリゲート以外のプロバイダーにのみ該当します。サブクラスでは、ForceChunked を設定することで、内容の送信にチャンク転送コーディングを使用するかどうかを制御します。false (既定) の場合、MATLAB は、メッセージの送信準備ができた時点で内容の長さがわかっているかどうかに基づいて、内容をチャンク化して送信するかどうかを決定します。

  • MATLAB で内容の長さがわかっている場合 (メッセージに Content-Length フィールドがあるか、このプロバイダーの expectedContentLength メソッドから数値が返された場合)、チャンク化して送信するかどうかを MATLAB で決定します。

  • MATLAB で内容の長さがわからない場合 (ヘッダーに Content-Length フィールドがないか、expectedContentLength の戻り値が空の場合)、MATLAB はメッセージを常にチャンク化して送信します。

ForceChunkedtrue の場合、内容の長さがわかっているかどうかに関係なく、既知の長さがチャンク サイズに満たない場合を除き、MATLAB はメッセージをチャンク化して送信します。このプロパティが true の場合は、メッセージに Content-Length フィールドを含めてはなりません。HTTP ではチャンクされたメッセージに Content-Length フィールドを含めることが許可されないためです。ただし、想定されるデータの長さを返しているかを MATLAB で検証する場合は、expectedContentLength メソッドで非ゼロの値を返すことができます。

MATLAB でメッセージをチャンク化して送信する場合、各チャンクのサイズは getData で返されたデータの長さと等しくなります。

MATLAB は、complete メソッドを呼び出してから start を呼び出すまでの間にこの値を読み取ります。このフィールドの設定は行いません。

属性:

GetAccess
public
SetAccess
public

送信する要求メッセージ。matlab.net.http.RequestMessage オブジェクトとして指定されます。

このプロパティはサブクラスの作成にのみ使用されます。このプロパティは、このプロバイダーで他のメソッドを呼び出す前であり、かつヘッダー フィールドを追加したりメッセージを検証したりする前に、このプロバイダーが Body に配置された RequestMessageRequestMessage.send メソッドと RequestMessage.complete メソッドで設定されます。プロバイダーは、このメッセージを調べて元の要求の内容を確認できます。

デリゲートの場合、このプロパティの値はデリゲーターと同じになります。ContentProviders がデリゲートである場合は、必ずしも要求メッセージの本文全体を提供するわけではないため、この Request のヘッダー フィールドがそのプロバイダーで提供するデータに関連するものであるとは限らないことに注意が必要です。通常、デリゲートでは、この要求のデータ関連のヘッダー フィールド (Content-Type など) は無視します。

このメッセージへのヘッダー フィールドの追加や既存のヘッダー フィールドの変更をプロバイダーで行う場合は、complete メソッドで Header プロパティにそれらのフィールドを追加します。それらのフィールドに対する処理は、complete の呼び出し元 (RequestMessage またはデリゲート元のプロバイダー) で決定されます。RequestMessage.sendRequestMessage.complete は、それらのフィールドを RequestMessageHeader に常にコピーします。デリゲート元のプロバイダーでは、フィールドをそれぞれの Header プロパティにコピーしたりメッセージに挿入したりできます (MultipartProvider の場合と同様)。詳細については、Header プロパティを参照してください。

このプロパティは読み取り専用です。

属性:

GetAccesspublic
SetAccessmatlab.net.http.RequestMessage

保護プロパティ

プロバイダーのサブタイプ。string として指定します。既定の値 "mixed" は、"multipart/mixed" に設定された Content-Type ヘッダーをメッセージと適切なパラメーターに追加します。サブクラスはコンストラクターまたは complete メソッドでこの値を変更できます。この値は "multipart/" の後の Content-Type に表示されます。

属性:

GetAccess
protected
SetAccess
protected

このプロバイダーのデリゲート先の ContentProvidermatlab.net.http.io.ContentProvider オブジェクトとして指定されます。このプロパティは、現在のデリゲート先のプロバイダーを示すために呼び出し元のプロバイダー (デリゲーター) の delegateTo メソッドで設定されます。現在のデリゲーションがない場合、値は空です。

このプロパティは complete メソッドで空に設定されます。

属性:

GetAccess
protected
SetAccess
protected

このプロバイダーのデリゲート元の ContentProvidermatlab.net.http.io.ContentProvider オブジェクトとして指定されます。

このプロパティは、ContentProvider から別のプロバイダーにメッセージのすべてまたは一部のデータの送信がデリゲートされている場合に、デリゲート元のプロバイダーを示します。たとえば、MultipartProvider はメッセージのパートを他のプロバイダーにデリゲートするため、各デリゲートに自身のハンドルを挿入します。それ以外の場合、MyDelegator は空です。このプロパティは、デリゲートの delegateTo メソッドで設定されます。

属性:

GetAccess
protected
SetAccess
protected

メソッド

すべて展開する

詳細

すべて展開する

バージョン履歴

R2018a で導入