matlab.net.http.io.MultipartConsumer クラス
名前空間: matlab.net.http.io
スーパークラス: matlab.net.http.io.GenericConsumer
HTTP メッセージ内のマルチパート コンテンツ タイプのヘルパー
説明
このコンシューマーはマルチパート HTTP 応答メッセージを処理します。マルチパート メッセージは、その Content-Type ヘッダー フィールドに "multipart"
が指定されていて、本文には 1 つ以上の部分が含まれているものです。各部分には、部分を記述する独自のヘッダー フィールドのセットが含まれていますが、それらで最も重要なものは Content-Type フィールドです。
matlab.net.http.io.MultipartConsumer
クラスは handle
クラスです。
サブクラスの作成
独自の ContentConsumer
を作成している場合、これが最上位のコンシューマー (RequestMessage.send
メソッドの 3 番目の引数として指定されている) でもマルチパート メッセージのパート (MultipartConsumer
コンストラクターの呼び出しの "デリゲート" として指定されている場合) でも機能します。MultipartConsumer
により、各デリゲートが応答メッセージ全体を処理しているように見えますが、実際には、結果を組み立てて、返された response.Body.Data
プロパティに格納される ResponseMessages
の配列に設定しています。
次に、MultipartConsumer
の動作について説明します。
この MultipartConsumer
がサーバーから完全なメッセージのパートを受信する場合、このパート内にヘッダーがあれば、これを解析して、このパート内の Content-Type フィールドに適したデリゲート コンシューマーを呼び出します。このパートに Content-Type フィールドがない場合、タイプは text/plain
であると想定されます。このタイプを処理できるデリゲートがない場合、GenericConsumer
の記述に従って、Content-Type に基づいてパートの既定の処理を使用します。
MultipartConsumer
は、完全なパートを受信するまでデリゲートを呼び出しません。MultipartConsumer
は、パートのデータをバッファーして、パートの受信の最後には、ContentConsumer
の表示されているプロパティすべてをこのコンシューマーからデリゲートにコピーします。デリゲートの Response.Body
をクリアし、デリゲートの Header
をパートのヘッダーに設定してから、デリゲートの initialize
メソッドおよび start
メソッドを呼び出します。その後、パートのペイロードを含むデリゲートの putData
メソッドが 1 回以上呼び出され、データ終了を示す putData(uint8.empty)
の呼び出しが続きます。デリゲートの initialize
メソッドが、パートを処理しないことを示すために false
を返す場合、パートのペイロードは、GenericConsumer
の記述に従って、パートの Content-Type の既定の動作を使用して処理されます。
デリゲートの start
メソッドが、目的の最大バッファー サイズがないことを示すために []
を返す場合、MultipartConsumer
は、パートのペイロード全体を提供する putData
への呼び出しを一度だけ行い、データ終了呼び出しが続きます。それ以外の場合は、バッファー サイズの単位内のペイロード全体を提供するために十分な回数 putData
を呼び出します。
デリゲートの putData
メソッドが、さらにデータを必要としないことを示すために STOP
戻り値を true
に設定する場合、MultipartConsumer
はメッセージが終了していたかのように転送を終了するために接続を閉じます。このように、デリゲートは元のメッセージの残りを処理するかどうかを制御します。putData
が []
の SIZE
を返す場合、メッセージも終了しますが、RequestMessage.send
の呼び出し元に例外がスローされます。
パートのコンシューマーが ContentConsumer
インスタンスではなく関数ハンドルとして指定されている場合、関数はコンシューマーが最初に必要になったときにのみ呼び出され、同じ応答メッセージの後続の該当するパートに対してはいずれも同じコンシューマー インスタンスが使用されます。関数ハンドルで処理されたパートについては、関数からは ResponseMessage
の本文にアクセスできないため、Response.Body.Data
の対応する ResponseMessage
にパートのヘッダーのみが格納されます。
デリゲートされたコンシューマーは MyDelegator
プロパティを通してこのコンシューマーとそのプロパティにアクセスできますが、この処理が必要になることはほとんどありません。
作成
説明
入力引数
プロパティ
メソッド
詳細
バージョン履歴
R2018a で導入