0

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

我已经实现了使用 apache commons 文件上传的上传。我想防止上传过大的文件,并 fileSizeMax在类中将属性设置为 10MB FileUploadBaseFileSizeLimitExceededException它有效,文件上传会为所有大于 10MB的文件抛出一个。此异常会在不到一秒的时间内引发。但主要问题是,整个文件将通过网络传输。我通过检查网络流量发现了这一点。之后重定向到错误页面完成。

当超过最大大小而不传输整个文件时,如何中断文件传输?我假设由于 web 表单属性,文件将在多个包中传输enctype ="multipart/form-data"

4

1 回答 1

5

您不能中途终止 HTTP 请求。如果您这样做了,您将无法返回 HTTP 响应,并且客户端最终将没有任何形式的反馈,可能会出现特定于浏览器的“对等连接重置”错误页面。

最好的办法是事先在 JavaScript 中验证它。顺便说一句,这仅在支持 HTML5 FileAPI的浏览器中有效。你没有告诉任何关于你正在使用哪个 JSF 文件上传组件的信息,所以我觉得你只是自制了一个,所以我将给出一个适用于呈现的 HTML 的通用答案<input type="file">(请注意,它工作得很好例如战斧的<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。

于 2013-01-25T14:36:35.003 回答