我们如何在不传输整个文件的情况下限制使用JavaScript(或者Java)上传的文件的大小?
时间:2020-03-06 14:58:50 来源:igfitidea点击:
有没有一种方法可以在客户端浏览器上验证从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。有些甚至支持多个文件上传并恢复部分上传,还有一些还提供了源代码。我们也可以编写自己的程序,但是它必须是经过签名的applet才能运行,因为它需要访问本地文件系统。如果我们将Apache用作网络服务器,则计算机中将需要足够的RAM,以适应给定时间上载的所有文件的内存中的整个文件大小。