我有一个在 JBoss 6.1 中运行的 JSF 应用程序,它使用内部Tomcat Servlet 容器。
我已经意识到使用apache共享文件上传上传。我想防止上传太大的文件,并在类FileUploadBase
中将属性
fileSizeMax
设置为 10MB。它有效,文件上传FileSizeLimitExceededException
会引发所有大于10MB。此异常在不到一秒的时间内引发。但主要问题是,整个文件将通过网络。我通过检查网络流量发现了这一点。之后,重定向到错误页面完成。
超过最大大小时如何中断文件传输不传输整个文件?我假设该文件将是由于 Web 表单属性enctype
="multipart/form-data"
,因此在多个包中传输。
不能中途中止 HTTP 请求。如果这样做,您将无法返回HTTP响应,并且客户端最终将没有任何形式的反馈,可能会出现特定于浏览器的"对等方重置连接"错误页面。
你最好的选择是事先在 JavaScript 中验证它。顺便说一下,这仅在支持 HTML5 File
API 的浏览器中有效。你没有告诉任何关于你正在使用哪个JSF文件上传组件的信息,所以我的印象是你只是自制的,所以我会给出一个适用于渲染HTML <input type="file">
的通用答案(请注意,它对例如Tomahawk的<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。