有没有一种方法可以在客户端浏览器上验证从JSP页面上传的文件大小是否超过了设置的大小限制,而不强制用户上传整个文件才发现它太大?
如果可能的话,我想避免任何专有控件或技术,例如Flash或ActiveX。
谢谢!
有没有一种方法可以在客户端浏览器上验证从JSP页面上传的文件大小是否超过了设置的大小限制,而不强制用户上传整个文件才发现它太大?
如果可能的话,我想避免任何专有控件或技术,例如Flash或ActiveX。
谢谢!
这并不是一个完美的解决方案,但如果您使用 request.getHeader("Content-Length")
检查 Content-Length HTTP 头,则可以选择不传输整个文件。
简单来说,一个非常大的文件不会一次性传输。您需要实际打开代表该 POST 数据块的流并从中读取才能传输整个文件。
另一方面,如果您担心拒绝服务攻击,则不能真正信任 Content-Length 头,因为它很容易被伪造。在这种情况下,您应该设置一个限制并流传输此文件,在超过该限制后立即停止。
使用JSP或PHP无法限制文件大小,因为在上传已经完成之前,您的页面不会收到请求。在那时,您可以决定不保存文件,但这可能为时已晚。
有一些Java解决方案可用,例如MyUploader或Hermes。一些甚至支持多文件上传和恢复部分上传,并且一些还提供源代码。您也可以编写自己的上传组件,但它需要是签名的小程序才能正常工作,因为它需要访问本地文件系统。如果您正在使用Apache作为Web服务器,则需要足够的RAM来容纳在给定时间内上传的所有文件的整个文件大小。