我有一个在JBoss 6.1中运行的JSF应用程序,它使用内部的 Tomcat Servlet容器。
我已经意识到上传了apache commons文件上传。
我想防止过大的文件上传,并在类
fileSizeMax
中将属性FileUploadBase
设置为10MB。它工作,文件
对于大于的所有文件,upload会抛出FileSizeLimitExceededException
10MB。这个异常在不到一秒的时间内抛出。
但主要的问题是,整个文件将被转移过来
网络。我通过检查网络流量找到了这个。然后重定向到错误页面。
超出最大尺寸时如何中断文件传输
没有转移整个文件?我假设文件将是
由于网络表单属性enctype
="multipart/form-data"
而在多个包中传输。
答案 0 :(得分:4)
您无法中途中止HTTP请求。如果你这样做了,你将无法返回HTTP响应,并且客户端最终没有任何形式的反馈,期望可能是浏览器特定的“Connection by peer”错误页面。
您最好的选择是事先在JavaScript中验证它。这只适用于browsers supporting HTML5 File
API。你没有告诉我你正在使用哪个JSF文件上传组件,所以我觉得你只是自制的一个,所以我会给出一个适用于渲染的HTML <input type="file">
的通用答案(注意)它在例如Tomahawk's <t:inputFileUpload>
)上运作良好:
<input type="file" ... onchange="checkFileSize(this)" />
有这样的东西
function checkFileSize(inputFile) {
var max = 10 * 1024 * 1024; // 10MB
if (inputFile.files && inputFile.files[0].size > max) {
alert("File too large."); // Do your thing to handle the error.
inputFile.value = null; // Clears the field.
}
}
如果较旧的浏览器不支持此功能,那么您就丢失了。您最好的选择是Flash或Applet。