当超过文件大小最大值时取消文件上载



我有一个在 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。

相关内容

  • 没有找到相关文章