1

したがって、playframework では、任意の応答をストリーミングして戻すことができるので、json リクエストを受け取ったときに、HTTP チャンクを実行して、非常に大きな応答の応答をストリーミングして戻すことができます。POST 呼び出しでも同じことができるかどうか疑問に思っていました。クライアントが非常に大規模な POST 呼び出しを行っている場合、要求をストリーミングできますか? これはhtmlで可能ですか?

そうは言っても、それができない場合は、curl またはその他の非ブラウザー クライアントがファイル (json 要求、または csv など) をアップロードするために使用する API が必要です。そのようなAPIを作成する方法は?

リクエスト全体を一度に受け取ることができないか、メモリ不足になることに注意してください。私はピースを受け取る必要があり、ピースを受け取ると、それを一度に 1 つずつバックエンド データストアに入れます。

また、サーバーを壊すような 1 つの巨大な巨大な要求でファイルを送信するのではなく、ファイルをストリーミングしていることを確認するための curl 構文は何でしょうか? クライアントにファイルを強制的にストリーミングさせる方法は?

ありがとう、ディーン

4

1 に答える 1

0

EssentialActionを使用して、HTTP 要求処理を完全に制御できます。EssentialAction はリクエスト本文を処理し、Result を返します。

通常の Play Actionは、EssentialAction の特殊なケースです。アクションはリクエスト ボディを処理し、結果も返しますが、常に 2 つのステップで処理を実行します。アクションは、最初にリクエスト本文を解析します。次に、アクションは解析された値を関数に解析して、結果を取得します。あなたにとっては、解析された値をメモリに保存する必要があることを意味するため、別の解析ステップを持つことは問題です。

EssentialAction を使用すると、リクエストの本文を受信時に処理するだけでよいため、解析された値をメモリに格納する必要がなくなります。

必要なことは、EssentialAction を返すメソッドをコントローラーに追加することです。

EssentialAction の署名は次のとおりです。

trait EssentialAction extends (RequestHeader) ⇒ Iteratee[Array[Byte], SimpleResult] 

EssentialAction は、リクエスト ヘッダーを受け入れてから、iteratee を返してリクエスト ボディを処理する必要があります。iteratee は、リクエスト本文が到着すると段階的に処理します。iteratee を使用して、各ピースが到着するたびに各ピースをデータ ストアに入れることができます。すべての部分の処理が完了したら、Result を返すことができます。

詳細はこちら: http://www.playframework.com/documentation/2.2.x/HttpApi

于 2014-02-01T10:41:48.090 に答える