上传文件大小超过限制时如何取消表单提交?

时间:2011-10-26 05:32:28

标签: java spring java-ee

我正在尝试使用Spring CommonsMultipartResolver来限制图像大小。问题是上传后会立即抛出“文件大小异常”,但上传会一直持续到最后(由于在表单上执行POST的性质)。因此,我最终在磁盘上保存一个临时文件,检查大小,然后向用户显示验证错误消息,并在此之上浪费额外的带宽/资源。

有没有办法通过在达到指定的图像尺寸时取消表单提交来解决问题?

1 个答案:

答案 0 :(得分:2)

这只能通过在客户端检查来实现。您可以使用提供HTML5 File API的新a size property来执行此操作,该{{3}}返回以字节为单位的大小。在HTML4中无法实现这一点(期望可能有一些特定于IE的ActiveX函数)因此,您是否依赖于目标webbrowser它是否有效。 FF> = 3.6,Chrome> = 2和Safari> = 4支持HTML5(不,不在IE中,甚至不在IE9中!)。在任何情况下,您都应该保留服务器端代码以检查文件大小,不仅是不支持它的浏览器的后备,还有最终用户禁用或破解JS代码的情况。

这是一个启动示例:

<input type="file" onchange="checkSize(this)" />

function checkSize(input) {
    if (input.files && input.files[0].size > (10 * 1024)) {
        alert("File too large. Max 10KB allowed.");
        input.value = null;
    }
}

是的,input.files是一个数组。自HTML5起,<input type="file">允许按multiple属性选择多个文件。