在处理文件上传事务的过程中,对文件大小的校验,从设计角度讲,最方便的方法莫过于在服务器端来做。但是出于服务器压力与客户体验的考虑,一般还是要放在客户端做。不过我总觉得客户端校验上传文件大小没有太好的办法。
第一种方法据说可以在FORM表单之内、FILE文件输入框之前加入如下代码来实现:
如果这样可以,当然很好,不过我这里从来没有成功过。
第二种方法是利用所谓图像预载入技术,当然只适用于图片的上传。示例代码如下:
问题出就出在它是缓存技术上,图片属性并非是从原始文件中取得,而是从加载到缓存的图片文件副本中取得。然而,图片由硬盘加载到缓存需要一些时间,如果选择文件后随即调用GetFileInfo()函数,则此函数返回的数组中,有可能不是正确的数值。因此,对于客户端上传图像而言,这种方法实用性不高。
不得不说,虽然我不太喜欢微软的东西,但对于IE用户,ActiveX有时还是很有用的。第三种方法就是利用ActiveX来获取本地文件的大小:
这种方法确实可以即时获取文件大小,不过只对Windows用户有效,更确切地说,只对IE用户有效,对于Web开发来说,显然局限性太大。
长期以来,客户端只是用来作为信息的展现界面,客户端的控制基本上只能依靠JavaScript,而出于安全性考虑,JavaScript与本地文件系统是绝缘的,这导致客户端与服务器端的交互呈不对称性。因此对于文件上传的客户端校验来说,目前还没有让人感到满意的办法。