javascript实现限制上传文件大小
前言:
项目中经常用到需要上传文件、照片等功能,同时需要限制所上传文件的大小。很多插件都会采用后台请求验证,前端Js校验比较少。本篇介绍一个前端JS便捷判断上传文件大小的方法。
这个是比较好的
<html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <scripttype="text/javascript"> varisIE=/msie/i.test(navigator.userAgent)&&!window.opera; functionfileChange(target,id){ varfileSize=0; varfiletypes=[".jpg",".png",".rar",".txt",".zip",".doc",".ppt",".xls",".pdf",".docx",".xlsx"]; varfilepath=target.value; varfilemaxsize=1024*2;//2M if(filepath){ varisnext=false; varfileend=filepath.substring(filepath.indexOf(".")); if(filetypes&&filetypes.length>0){ for(vari=0;i<filetypes.length;i++){ if(filetypes[i]==fileend){ isnext=true; break; } } } if(!isnext){ alert("不接受此文件类型!"); target.value=""; returnfalse; } }else{ returnfalse; } if(isIE&&!target.files){ varfilePath=target.value; varfileSystem=newActiveXObject("Scripting.FileSystemObject"); if(!fileSystem.FileExists(filePath)){ alert("附件不存在,请重新输入!"); returnfalse; } varfile=fileSystem.GetFile(filePath); fileSize=file.Size; }else{ fileSize=target.files[0].size; } varsize=fileSize/1024; if(size>filemaxsize){ alert("附件大小不能大于"+filemaxsize/1024+"M!"); target.value=""; returnfalse; } if(size<=0){ alert("附件大小不能为0M!"); target.value=""; returnfalse; } } </script> </head> <body> <inputtype="file"name="contractFileName"style="width:500px;"onchange="fileChange(this);"/> </body> </html>
下面的代码不建议使用
代码很简单,关键就是怎么用JS拿到文件然后获取文件大小,进而去判断拦截。由于各种历史原因,IE的ActiveX控件因素,获取文件的方法可能和其他浏览器有所不同,所以只需稍加判断即可。
JS代码:
<scripttype="text/javascript"> //判断是否为IE浏览器:/msie/i.test(navigator.userAgent)为一个简单正则 varisIE=/msie/i.test(navigator.userAgent)&&!window.opera; functionfileChange(target){ varfileSize=0; if(isIE&&!target.files){//IE浏览器 varfilePath=target.value;//获得上传文件的绝对路径 /** *ActiveXObject对象为IE和Opera所兼容的JS对象 *用法: *varnewObj=newActiveXObject(servername.typename[,location]) *其中newObj是必选项。返回ActiveXObject对象的变量名。 *servername是必选项。提供该对象的应用程序的名称。 *typename是必选项。要创建的对象的类型或类。 *location是可选项。创建该对象的网络服务器的名称。 *\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ *Scripting.FileSystemObject为IIS内置组件,用于操作磁盘、文件夹或文本文件, *其中返回的newObj方法和属性非常的多 *如:varfile=newObj.CreateTextFile("C:\test.txt",true)第二个参表示目标文件存在时是否覆盖 *file.Write("写入内容");file.Close(); */ varfileSystem=newActiveXObject("Scripting.FileSystemObject"); //GetFile(path)方法从磁盘获取一个文件并返回。 varfile=fileSystem.GetFile(filePath); fileSize=file.Size;//文件大小,单位:b } else{//非IE浏览器 fileSize=target.files[0].size; } varsize=fileSize/1024/1024; if(size>1){ alert("附件不能大于1M"); } } </script>
HTML代码
<inputtype="file" style="width:500px;"onchange="fileChange(this);"/>
一个简单、轻便、快捷的用JS代码来判断文件大小的方法就OK了,至于ActiveXObject对象感兴趣的可以去深究,它可以根据入参的不同返回不同的对象,通常该对象的功能和作用也是非常有用和强大的。
本文内容就到这里了,是不是非常简单实用的代码呢,希望大家能够喜欢。