2013-04-04 70 views
1

我使用play 2.1.0並希望實現帶有幾個參數的文件上傳,即multipart/form-data表單有一些小字段和文件本身。當isMaxSizeExceeded時訪問請求主體

如果我上傳的文件,而無需使用註釋

@BodyParser.Of(value = BodyParser.MultipartFormData.class, maxLength = MAX_FILE_SIZE_B)

,並檢查文件的大小像uploadedFile.length > MAX_SIZE我可以訪問請求主體和它的所有不爲空的時間。

如果我使用註釋,當maxSizeExceeded ctx.request().body().asMultipartFormData()爲null時,即使我的小參數在瀏覽器發送的請求中首先出現。這是正確的行爲,是任何方式來獲取小參數,即使文件太大?

確實,第一種方法很糟糕,因爲大型文件實際上會上傳到服務器上?

+0

行爲是預期的,因爲一旦有效載荷大小超過max_size限制,有效載荷就會被丟棄。所以,你不能訪問任何表單域。請嘗試將這些字段添加爲請求標頭的一部分,如果有幫助的話。對不起,遲到的迴應,遲到比從未更好:)。 – Sundar 2013-04-23 09:28:08

+0

@Sundar你可以請創建一個答案,我會接受它。還鏈接到源將非常感激。 – 2013-04-23 15:29:45

回答

1

行爲是預期的,因爲標題將包含文件大小,並且如果有效負載/文件大小超過了max_size限制,服務器將不會收到該文件並且連接將被關閉。所以,你不能訪問任何表單域。請嘗試將這些字段添加爲請求標頭的一部分,如果有幫助的話。

沒有文件解釋這一點,但它是如何在http層中處理的。下面的code可能會解釋一下,當有效負載超過它包裝body = null的對象的限制時。

要回答你的問題,是的第二種方法是好的,並幫助你的服務器不必要地接受大文件。

+0

謝謝!很好的答案。 – 2013-04-26 18:48:36

相關問題