有没有办法在客户端浏览器上验证从 JSP 页面上传的文件的大小是否超过设定的大小限制,而不强制用户上传整个文件才发现它太大了?
如果可能,我想远离任何专有控件或技术,如 Flash 或 ActiveX。
谢谢!
有没有办法在客户端浏览器上验证从 JSP 页面上传的文件的大小是否超过设定的大小限制,而不强制用户上传整个文件才发现它太大了?
如果可能,我想远离任何专有控件或技术,如 Flash 或 ActiveX。
谢谢!
这不是一个完美的解决方案,但是如果您检查 Content-Length HTTP 标头,request.getHeader("Content-Length")
那么您可以选择不传输整个文件。
作为解释,一个非常大的文件不会一次全部传输。您实际上必须打开一个表示该 POST 数据块的流并从中读取整个要传输的数据。
另一方面,如果您担心拒绝服务攻击,那么您就不能真正信任 Content-Length 标头,因为它很容易被伪造。在这种情况下,您应该设置一个限制并流式传输此文件,一旦超过该限制就停止。
建议您重新考虑 Flash 决定并查看 YUI Uploader,此处:
http://developer.yahoo.com/yui/uploader/
除其他事项外,fileSelect 事件将在选择文件之后但在上传之前立即告诉您所选文件的大小(以字节为单位),因此您可以进行相应的限制。
使用 JSP 或 PHP,您将无法限制文件大小,因为您的页面在上传完成之前不会收到请求。此时您可以决定不保存文件,但这可能为时已晚。
有一些 Java 解决方案,例如MyUploader或Hermes。有些甚至支持多文件上传和恢复部分上传,有些还给你源代码。您也可以自己编写,但它需要是一个签名的小程序才能运行,因为它需要访问本地文件系统。如果您使用 Apache 作为您的网络服务器,则您的机器中需要足够的 RAM 以适应在给定时间上传的所有文件的内存中的整个文件大小。