主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

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

パッケージ:matlab.net.http.io
スーパークラス:处理matlab.mixin.Heterogeneous

HTTPメッセージペイロードのContentProvider

説明

内容提供者は,メッセージの送信中にHTTPRequestMessageのデータを提供します。簡単なものとしては、データを MATLAB®型からバイトストリームに変換するプロバイダーがあります。より複雑なプロバイダーでは,データをサーバーにストリーミングできます。この場合,データの取得や生成を送信と同時に行えるため、メッセージの開始前にすべてのデータをメモリに読み込む必要がありません。

通常,データをWebサービスに送信するときは(把要求または帖子要求が一般的),RequestMessageを作成し,データをMessageBodyオブジェクトの形式でRequestMessage。身体プロパティに挿入します。そのメッセージをRequestMessage.sendを使用して送信すると,そのデータがサーバーに送信するバイトストリームに変換されます。この変換は,メッセージの- typeと的身体。数据のデータのタイプに基づいてMATLABで行われます。この変換ルールについては,MessageBody。数据を参照してください。

MessageBodyオブジェクトをRequestMessage。身体プロパティに挿入する代わりに,内容提供者オブジェクトを作成して挿入することができます。この場合,メッセージを送信すると、MATLAB で内容提供者のメソッドが呼び出され,送信するデータのバッファーがメッセージの送信中に取得されます。

メッセージにMessageBodyまたは内容提供者のどちらを挿入した場合も,RequestMessage.sendの呼び出しはメッセージ全体が送信されて応答を受信するか,エラーが発生するまで戻りません(ブロックされます)。ただし,内容提供者の場合は,送信がブロックされている間,送信するデータのバッファーを取得するためのプロバイダーに対するコールバックがMATLABで定期的に実行されます。内容提供者では,これらのコールバックで,ファイル,MATLAB配列,ハードウェアセンサー,MATLAB関数などの任意のソースからデータを取得できます。プロバイダーの役割は,そのデータをWebに送信できるバイトストリーム(uint8形式のバッファー)に変換することです。

内容提供者は,クラスの作成者が独自のデータジェネレーターやデータコンバーターを使用してサブクラス化できるように設計された抽象クラスです。また,MATLABプロバイダーのいずれかを使用(またはサブクラス化)すれば,サブクラスを記述せずにさまざまなソースからデータを生成させることができます。これらのプロバイダーには,データをMessageBodyに直接挿入する場合に実行される自動変換に比べて,データの取得方法や変換方法をより柔軟に制御できるオプションがあります。次のいずれかの内容提供者サブクラスを使用します。

データをストリーミングする必要がない場合でも,これらのプロバイダーのいずれかを使用すると,データが内部形式からuint8ストリームに変換されるため,特定のタイプの内容を送信する処理が簡単になります。たとえば,FormProviderを使用すれば,フォームの応答をサーバーに送信し,データをQueryParameterオブジェクトの配列として表現できるので便利です。MultipartFormProviderを使用すると,マルチパートフォームの応答を送信できるため,マルチパートフォームの応答の作成が簡単になります。内容提供者を使用する場合は,サーバーへの送信が想定される内容のタイプを理解しておく必要があります。

matlab.net.http.io.ContentProviderクラスは处理クラスです。

サブクラスの作成

簡単な内容提供者であれば,MATLABから要求されたときにデータのバッファーを提供するgetDataメソッドを実装するだけで作成できます。プロバイダーを使用するには,RequestMessage身体プロパティに挿入します。この例では,RequestMessageコンストラクターの3番目の引数でMyProviderオブジェクトを身体に挿入しています。

提供者= MyProvider;req = matlab.net.http.RequestMessage('put', headers, provider);resp = req.send (uri);

次に,コンストラクターに引数として名前が渡されたファイルを読み取ってWebに送信するMyProviderクラスの例を示します。この例では,処理が終了するかこのプロバイダーが削除されたときにファイルを閉じます。

class . MyProvider < matlab.net.http.io.ContentProvider属性FileID双端方法function obj = MyProvider(name)文件标识= fopen(名称);end function [data, stop] = getData(obj, length) [data, len] = fread(obj. length)文件标识、长度、“* uint8”);停止= len < length;如果(停止)文件关闭(obj.FileID);obj。文件标识= [];delete(obj) if ~isempty(obj. fileid) fclose(obj. fileid);obj。文件标识= [];端端端端

MATLABは,送信する新しいメッセージの作成中にプロバイダーの完整的メソッドを呼び出します。これは,プロバイダーでの新しいメッセージの準備として,必要なヘッダーフィールドをメッセージに追加できるようにするためです。MATLABは,データの送信時になると,getDataの最初の呼び出しの前にプロバイダーの开始メソッドを呼び出します。

プロパティ

すべて展開する

パブリックプロパティ

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

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

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

  • 请求。头のフィールドがGenericFieldの場合,のフィールドは無視されます。

  • 请求。头のフィールドがGenericFieldでない場合,のフィールドに置き換えられます。

これらの一方または両方の价值が空の場合は,请求。头からフィールドが削除され,メッセージの正常な終了時にも追加されません。

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

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

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

属性:

GetAccess
公共
SetAccess
公共

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

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

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

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

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

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

属性:

GetAccess
公共
SetAccess
公共

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

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

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

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

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

属性:

GetAccess 公共
SetAccess matlab.net.http.RequestMessage

保護プロパティ

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

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

属性:

GetAccess
受保护的
SetAccess
受保护的

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

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

属性:

GetAccess
受保护的
SetAccess
受保护的

メソッド

すべて展開する

詳細

すべて展開する

R2018aで導入