2009-11-19 69 views
4

如何在Apache Wicket版本1.4中限制上傳文件大小?如何在Wicket中限制上傳文件大小

我正在使用FileUploadField來處理上傳與正常形式提交沒有任何Ajax的東西。使用Form.setMaxSize()來限制上傳文件的大小是否足夠?

如果上傳的文件太大,瀏覽器將上傳整個文件,Wicket將使用密鑰[form-id].uploadTooLarge創建驗證錯誤消息。

但是Wicket如何處理這種情況,創建臨時文件等?

我想要防止在Wicket處理請求時用戶上傳幾個不適合內存或磁盤的GB文件的情況。

回答

4

我在擋板svn上做了一些挖掘,發現該文件實際上是由FileUploadBase.parseRequest(RequestContext ctx)寫入磁盤的。在將其寫入磁盤之前,此類會檢查文件大小。

文件大小檢查最終使用javax.servlet.ServletRequest.getContentLength()來確定文件的大小,這意味着實際實現會根據您使用的servlet容器而變化;但是,我認爲可以肯定的是,任何編寫servlet實現的人都知道足以從頭文件獲取文件大小,而不是將整個文件寫入磁盤,然後檢查其大小。所以,你不必擔心人們試圖使用所有的磁盤空間來上傳大文件。

+0

假設某人僞造Content-Length標頭爲一個小值並在相同的請求中上傳更大的文件? – 2009-12-04 07:45:53

+0

我沒有看到代碼中的任何內容來防止這種情況,但這並不具有權威性。此外,它看起來像實施已經改變了1.3.5和1.4之間的一些。我想要做的事情就是爲你所考慮的漏洞寫一個概念證明,看看它是否有效。你也可以打開用戶郵件列表(http://wicket.apache.org/community.html#Community-Mailinglists) - 開發者監視它,並且根據我的經驗,它是非常敏感的。 – perilandmishap 2009-12-07 20:13:22

4

表格文檔說:

在上傳錯誤二 資源的按鍵可用於指定 錯誤信息的情況下:uploadTooLarge和 uploadFailed即[頁碼]的.properties [形式-ID ] .uploadTooLarge =您已經 上傳一個文件,是超過2MB

的 允許的限制

我的猜測是那些獲得形式解僱提交驗證.. 你有沒有試過看看是否是這種情況?

2
form.setMaxSize(Bytes.kilobytes(fileUploadMaximumKilobytes)); 
+2

這將設置表單提交的最大大小,包括標題,其他字段等。如果您想要允許達到N個字節大小的文件,您需要將setMaxSize()設置爲略高於最大文件大小並檢查實際文件大小下載後。 – 2011-03-01 13:20:56

相關問題