如何在不传输整个文件的情况下限制使用JavaScript(或Java)上载的文件的大小?

有没有办法在客户端浏览器上validation从JSP页面上传的文件的大小是否超过设置的大小限制而不强制用户上传整个文件只是为了发现它太大了?

如果可能的话,我想远离任何专有控件或技术,如Flash或ActiveX。

谢谢!

这不是一个完美的解决方案,但如果使用request.getHeader("Content-Length")检查Content-Length HTTP标头,则可以选择不传输整个文件。

作为解释,一个非常大的文件不会一次全部传输。 您必须实际打开一个表示该POST数据块的流,并从中读取整个要传输的内容。

另一方面,如果您担心拒绝服务攻击,那么您无法真正信任Content-Length标头,因为它很容易被伪造。 在这种情况下,您应设置限制并流式传输此文件,并在超出该限制时立即停止。

建议您重新考虑Flash决策并查看YUI上传器,在这里:

http://developer.yahoo.com/yui/uploader/

除其他外,fileSelect事件将在选择文件之后立即以字节为单位告诉您所选文件的大小,但在上传之前,您将能够相应地进行限制。

使用JSP或PHP,您将无法限制文件大小,因为在上载已经发生之前,您的页面将不会收到请求。 此时您可以决定不保存文件,但这可能为时已晚。

有一些Java解决方案,例如MyUploader或Hermes 。 有些甚至支持多个文件上传和恢复部分上传,有些还为您提供源代码。 您也可以编写自己的,但它需要是一个签名的小程序才能运行,因为它需要访问本地文件系统。 如果您使用Apache作为您的网络服务器,您将需要在您的计算机中有足够的RAM来满足在给定时间上传的所有文件的内存中的整个文件大小。