如何使用JavaScript(或Java)限制上传文件的大小而无需传输整个文件?

11

有没有一种方法可以在客户端浏览器上验证从JSP页面上传的文件大小是否超过了设置的大小限制,而不强制用户上传整个文件才发现它太大?

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

谢谢!

3个回答

4

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

简单来说,一个非常大的文件不会一次性传输。您需要实际打开代表该 POST 数据块的流并从中读取才能传输整个文件。

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


2
建议您重新考虑使用Flash,并查看这里的YUI上传器:

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

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

1

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

有一些Java解决方案可用,例如MyUploaderHermes。一些甚至支持多文件上传和恢复部分上传,并且一些还提供源代码。您也可以编写自己的上传组件,但它需要是签名的小程序才能正常工作,因为它需要访问本地文件系统。如果您正在使用Apache作为Web服务器,则需要足够的RAM来容纳在给定时间内上传的所有文件的整个文件大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接