如何在Apache Wicket 1.4版的上传中限制文件大小?
我正在使用FileUploadField来处理使用普通表单提交的上传而没有任何Ajax内容。是否足以使用Form.setMaxSize()来限制上传文件的大小?
如果上传的文件太大,浏览器将上传整个文件,Wicket将使用密钥[form-id].uploadTooLarge
创建验证错误消息。
但是Wicket如何在内部处理这种情况,创建临时文件等?
我想防止用户在Wicket处理请求时上传几个GB不适合内存或磁盘的文件。
答案 0 :(得分:4)
表格上的文件说:
如果上传错误两次 资源键可用于指定 错误消息:uploadTooLarge和 uploadFailed即在[page] .properties中 [form-id] .uploadTooLarge =你有 上传了一个文件 允许的限制为2Mb
我的猜测是那些在表单提交验证中被解雇的.. 你有没有试过看看是否是这种情况?
答案 1 :(得分:4)
我在wicket svn中进行了一些挖掘,发现该文件实际上是由FileUploadBase.parseRequest(RequestContext ctx)写入磁盘的。此类在将任何文件写入磁盘之前检查文件大小。
文件大小检查最终使用javax.servlet.ServletRequest.getContentLength()来确定文件的大小,这意味着实际的实现因您使用的servlet容器而异;但是,我认为可以安全地假设任何编写了servlet实现的人都知道从头部获取文件大小而不是将整个内容写入磁盘然后检查其大小。因此,您不必担心尝试使用所有磁盘空间上传大文件的人。
答案 2 :(得分:3)
form.setMaxSize(Bytes.kilobytes(fileUploadMaximumKilobytes));