用javascrit验证上传文件大小

对于web开发人员来说文件上传文件是经常遇到的,判断文件大小也是不可缺少,很多人不愿意到后台判断,因为如果传到后台判断,如果文件过大报错,还涉及到效率和数据回显的问题,如果能在前台用javascript现行判断文件大小,是最好不过了。

网上总结的一般有两种方式来实现:

第一种是应用ActiveX控件的实现,例如:

Javascript代码 
<script type="text/javascript">    
function getFileSize(filePath)    
{    
   var fso = new ActiveXObject("Scripting.FileSystemObject");    
   alert("文件大小为:"+fso.GetFile(filePath).size);    
}    
</script>    
<body>    
<INPUT TYPE="file" NAME="file" SIZE="30" οnchange="getFileSize(this.value);">    
</body> 

这种方法可以实现,也容易被开发人员想到,但是需要更改浏览器的安全设置,不然会报“Automation服务器不能创建对象”这个脚本错误。将浏览器的安全设置改为“中”,然后将ActiveX的设置设为启用就OK了。

这种方式不安全,不推荐。

第二种方式,用img的dynsrc属性实现。

在html标签中有一个不为一般开发人员“深”知的img标签,先来说下他有的属性:src,dynsrc,start,alt,controls,loop,loopdelay,hspace,vspace....还有一些常用的属性就不列出来了,在这里我们说一下"dynsrc"这个属性:dynsrc可以用来插入各种多媒体,格式可以是Wav、Avi、AIFF、AU、MP3、Ra、Ram等等。url为音频或视频文件及其路径,可以是相对路径或绝对路径。

示例:<img dynsrc="xxxx.mp3">

这样我们就可以根据dynsrc动态赋值任何类型文件的路径,在javascript中根据Image对象本身的fileSize属性来得到文件的大小。当然Image对象还有其他的几个属性,例如:fileCreatedDate、fileModifiedDate、fileSize、fileUpdatedDate、filters... , 代码如下:


Javascript代码 
<script type="text/javascript">    
function getFileSize(filePath)    
{    
   var image=new Image();    
   image.dynsrc=filePath;    
   alert(image.fileSize);    
}    
</script>    
<body>    
<INPUT TYPE="file" NAME="file" SIZE="30" οnchange="getFileSize(this.value)">    
</body>  
<script type="text/javascript">
function getFileSize(filePath)
{
   var image=new Image();
   image.dynsrc=filePath;
   alert(image.fileSize);
}
</script>
<body>
<INPUT TYPE="file" NAME="file" SIZE="30" οnchange="getFileSize(this.value)">
</body>

这种方式我没试验成功,我用的是IE8,提示无法设置dynsrc属性。

 

综上:用javascript操作文件,不是安全性不好,就是兼容性不好,我想造成这种结果的原因也是担心如果js能自如的操作你本机的文件系统,安全性就大大降低了。

最好不要用这种方式,判断大小还是在后台比较安全、方便。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值