Delphi XE2 を使用して DataSnap REST サーバーを構築し、 TStream 経由でファイルをアップロードするためのサーバー メソッドを追加しました。
function TServerMethods.updateUploadFile(sFilename: string; UploadStream: TStream): string;
これをさまざまなクライアント (Android、iOS など) から呼び出せるようにしたいと考えており、Postman (Chrome プラグイン) などのさまざまな REST クライアントを使用してメソッドをテストしています。ただし、これまでのところ、HTTP POST 本文のコンテンツを受け入れることができません。POST コマンドを送信するたびに、常に次の応答が返されます。
{"error":"Message content is not a valid JSON value."}
さまざまな「Content-Type」設定を使用してみましたが、何も機能しないようです。DataSnap がコンテンツが JSON であることを主張しているように見えますか? 有効な JSON をコンテンツ領域に貼り付けようとしましたが、これも同じエラー応答を返しました。
TStream を DataSnap サーバー メソッドの入力パラメータとしてうまく使用した人はいますか? 別の方法で行う必要がありますか?ファイルをダウンロードするための出力パラメータとして TStream を何度も使用しましたが、うまく機能します。これがアップロードの最初の試みです。
アップデート
uploadFile サーバー メソッドをテストするために簡単な Delphi DataSnap クライアントを作成しましたが、これはすべてうまく機能します。次に、Fiddler を使用して、Delphi クライアントがコンテンツ本文で TStream を送信するために使用する POST コマンドを調べたところ、それが整数 (バイト) の JSON 配列であることがわかりました[37,80,68,70,45,49,46,51,13,10]
。したがって、Android/iOS クライアントを変更して、POST を実行する前にバイナリ データをこのバイト配列形式に変換できることがわかりますが、これはオーバーヘッドなしで行うことができます。TStream が戻りパラメータであるときに DataSnap が未加工のバイナリをストリーミングする場合、未加工のバイナリを入力パラメータとしてストリーミングできないのはなぜですか?