2

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 が未加工のバイナリをストリーミングする場合、未加工のバイナリを入力パラメータとしてストリーミングできないのはなぜですか?

4

1 に答える 1