2009-11-19 68 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

相关问题