1

小さな REST API を含むアプリケーションに取り組んでいます。これらのメソッドの 1 つは、PUT 要求で大きな (約 300MB) バイナリ ファイルのアップロードを受け入れる必要があります。

ファイルが非常に大きく、そのような要求が一度に複数実行されるリスクがあるため、要求本文全体をメモリに保持することは避けたいと思います。php://inputストリームから直接読み取り、それをファイルに吸い上げることでこれを行うことを望んでいました。

ただし、コントローラーのinput()メソッドが干渉しているようです。ストリームinput()を読んだらそれはなくなってしまうので、繰り返しアクセスできるように保持しておくという論理的根拠は理解しています。明らかに、これは私がこのインスタンスで回避したい動作です。php://inputinput()

ただし、input()はコントローラー コードが実行される前にどこかで呼び出されているようphp://inputです。

それで、私の質問: CakePHP コントローラが非常に大きなリクエストボディを、最初に全体をメモリにロードせずにディスクにストリーミングする方法はありますか?

4

1 に答える 1

0

私はそれを理解したので、次のことが他の誰かの時間を節約することを願っています.

これは私の側のエラーであることが判明しましたが、CakePHP に関連するものではありません。php://inputを呼び出さずにコントローラーから読み取るとController::input()、(通常は) 期待どおりに生のリクエスト本文が取得されます。

私の問題は、不注意に request header を設定してしまったことContent-Type: application/jsonです。これにより、CakePHP の REST コードが本文を入力として解析しようとしました。タイプ(私の場合application/x-gzip)を正しく設定すると、すべてが正しく機能しました。

于 2013-02-22T17:04:39.140 に答える