超出FileSizeMax时取消FileUpload

时间:2013-01-25 14:18:42

标签: java jsf file-upload apache-commons apache-commons-fileupload

我有一个在JBoss 6.1中运行的JSF应用程序,它使用内部的 Tomcat Servlet容器。

我已经意识到上传了apache commons文件上传。 我想防止过大的文件上传,并在类 fileSizeMax中将属性FileUploadBase设置为10MB。它工作,文件 对于大于的所有文件,upload会抛出FileSizeLimitExceededException 10MB。这个异常在不到一秒的时间内抛出。 但主要的问题是,整个文件将被转移过来 网络。我通过检查网络流量找到了这个。然后重定向到错误页面。

超出最大尺寸时如何中断文件传输 没有转移整个文件?我假设文件将是 由于网络表单属性enctype ="multipart/form-data"而在多个包中传输。

1 个答案:

答案 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。