4

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

我正在使用FileUploadField处理没有任何 Ajax 内容的普通表单提交的上传。使用Form.setMaxSize()限制上传文件的大小是否足够?

如果上传的文件太大,浏览器将上传整个文件,Wicket 将创建带有 key 的验证错误消息[form-id].uploadTooLarge

但是 Wicket 如何在内部处理这种情况,创建临时文件等?

我想防止在 Wicket 处理请求时用户上传不适合内存或磁盘的几 GB 文件的情况。

4

3 回答 3

4

我在 wicket存储库中进行了一些挖掘,发现该文件实际上是由FileUploadBase.parseRequest(RequestContext ctx)写入磁盘的。此类在将任何文件写入磁盘之前检查文件大小。

文件大小检查最终使用 javax.servlet.ServletRequest.getContentLength() 来确定文件的大小,这意味着实际实现会根据您使用的 servlet 容器而有所不同;但是,我可以肯定地假设任何编写过 servlet 实现的人都知道足以从头文件中获取文件大小,而不是将整个内容写入磁盘然后检查其大小。因此,您不必担心有人试图上传大文件而用尽您的所有磁盘空间。

于 2009-12-04T00:16:36.853 回答
4

Form 上的文档说:

在上传错误的情况下,有两个资源键可用于指定错误消息:uploadTooLarge 和 uploadFailed 即在 [page].properties [form-id].uploadTooLarge=您上传的文件超过了 2Mb 的允许限制

我的猜测是那些在表单提交验证中被解雇了。你有没有试过看看是否是这种情况?

于 2009-11-30T16:19:49.470 回答
3
form.setMaxSize(Bytes.kilobytes(fileUploadMaximumKilobytes));
于 2011-02-24T11:36:57.673 回答