2013-04-05 27 views
1

因此,在playframework中,我可以將任何響應流回來,所以當我得到一個json請求時,我可以做http chunking並將響應流回給一些真正非常大的響應。我想知道是否可以在POST調用上完成相同的操作。如果客戶端有非常大的POST調用,他們可以將請求流給我嗎?這可能與HTML?這就是說,如果我不能做到這一點,我需要一個捲曲或一些其他非瀏覽器客戶端將用於上傳文件(json請求,或csv等)的api。如何創建這樣一個API?如何做post post chunking(對比下載chunking)

我應該注意,我不能一次收到整個請求,或者會導致內存不足。我需要收到一些作品,並且隨着我收到的作品每次都會將作品放到後端數據存儲中。

此外,什麼是curl語法,以確保它是流式傳輸文件,而不是發送一個巨大的請求,將打破服務器?如何強制客戶端流式傳輸文件?

感謝, 院長

回答

0

您可以通過使用EssentialAction獲得通過HTTP請求處理的完全控制。 EssentialAction處理請求主體並返回結果。

正常遊戲Action s是EssentialAction的特例。操作處理請求主體並返回結果,但它們總是分兩步執行處理。操作首先解析請求主體。然後,Actions將解析的值解析爲一個函數以獲得Result。對於你來說,單獨的解析步驟是一個問題,因爲這意味着解析的值需要存儲在內存中。

如果您使用EssentialAction,那麼您可以避免將已分析的值存儲在內存中,因爲您可以在請求正文到達時處理它。

你需要做的是向你的控制器添加一個返回EssentialAction的方法。

EssentialAction的簽名是:

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

的EssentialAction需要接受請求報頭,然後返回一個iteratee處理請求體。迭代器將在請求主體到達時逐漸處理請求主體。您可以使用迭代器在每件作品到達時將每件作品放入數據存儲中。當你完成處理所有的作品時,你可以返回一個結果。

更多的信息在這裏:http://www.playframework.com/documentation/2.2.x/HttpApi