javascrip客户端验证文件大小及文件类型并重置上传


Posted in Javascript onJanuary 12, 2011

下面是我写的一个通用的javascrip脚本,虽然调用时需要赋的参数比较多,但都是实际需要中真正需要使用到的。各位可以参考,并改成自己需要的脚本。

/*****获取文件信息 edit by zhaogw 参考by misssionOtherAttEdit.jsp*****/ 
/*file:input type="file"的对象,一般用this。 
vType:一个对象名,用于记录文件的文件类型信息。一般为input对象。 
DivType:一个Div对象的名称。把其innerHTML内容用于显示文件的类型信息。 
vFile:一个对象名,用于记录文件的文件名信息。一般为input对象。 
DivFile:一个Div对象的名称。把其innerHTML内容用于显示文件的文件名信息。 
vSize,DivSize同上面类似,只是记录文件的大小信息。 
mMaxSize:以m为单位计算其允许上传的最大文件大小。 
allowType:只接受的文件类型 
*/ 
function getFileInfo(file,mMaxSize,allowType,vFile,DivFile,vType,DivType,vSize,DivSize){ 
var filePath = file.value;//文件路径 
var fileName;//文件名 
var fileType;//文件类型 
var tmpObj;//临时对象 
var notAllowType=new Array("exe","bat","asp","jsp","js","dll"); 
var mHTML=document.getElementById(file.name+'Td').innerHTML; 
/* 
var mHTML="<input type='file' name='"+ 
file.name+"' class='input100' id='"+file.id+ 
"' Tip='无法上传空文件' contentEditable='false' tmt:required='true' focusTips='请输入文件名' onChange='getFileInfo(this,"+ 
mMaxSize+",\""+allowType+"\",\""+vFile+"\",\""+DivFile+"\",\""+vType+"\",\""+DivType+"\",\""+vSize+"\",\""+DivSize+"\")'>"; 
*/ 
// alert(mHTML); 
//get file name 
if(filePath != null && filePath != ''){ 
var pass=true; 
//文件类型 
fileType = filePath.substring(filePath.lastIndexOf('.') + 1,filePath.length); 
if (fileType!=null&&fileType!='') 
{ 
for (var i in notAllowType){ 
if (fileType.toLowerCase()==notAllowType[i]){ 
pass=false; 
break;} 
} 
} 
//允许的类型,空的话就不设置允许类型 
var match=false; 
if (allowType!=null&&allowType!=''){ 
var allowList=allowType.split('|'); 
for (var j in allowList){ 
if (fileType.toLowerCase()==allowList[j].toLowerCase()){ 
match=true; 
break;} 
} 
} else {match=true;} 
if (pass&&match) 
{ 
fileName = filePath.substring(filePath.lastIndexOf('\\') + 1,filePath.length); 
tmpObj=document.getElementById(vType); 
if (tmpObj!=null) 
tmpObj.value = fileType; 
tmpObj=document.getElementById(DivType); 
if (tmpObj!=null) 
tmpObj.innerHTML = fileType; 
tmpObj=document.getElementById(vFile); 
if (tmpObj!=null) 
tmpObj.value = fileName; 
tmpObj=document.getElementById(DivFile); 
if (tmpObj!=null) 
tmpObj.innerHTML = fileName; 
try{ 
var fso,f,s; 
fso = new ActiveXObject("Scripting.FileSystemObject"); 
f = fso.GetFile(file.value); 
if(f.Size > mMaxSize*1048576){ 
alert("文件大小不能超过"+mMaxSize+"M"); 
document.getElementById(file.name+'Td').innerHTML = mHTML; 
tmpObj=document.getElementById(vType); 
if (tmpObj!=null) 
tmpObj.value = ''; 
tmpObj=document.getElementById(DivType); 
if (tmpObj!=null) 
tmpObj.innerHTML = ''; 
tmpObj=document.getElementById(vFile); 
if (tmpObj!=null) 
tmpObj.value = ''; 
tmpObj=document.getElementById(DivFile); 
if (tmpObj!=null) 
tmpObj.innerHTML = ''; 
tmpObj=document.getElementById(vSize); 
if (tmpObj!=null) 
tmpObj.value = ''; 
tmpObj=document.getElementById(DivSize); 
if (tmpObj!=null) 
tmpObj.innerHTML = ''; 
return; 
} 
else 
{ 
tmpObj=document.getElementById(vSize); 
if (tmpObj!=null) 
tmpObj.value = f.Size; 
tmpObj=document.getElementById(DivSize); 
if (tmpObj!=null) 
tmpObj.innerHTML = f.Size+" byte(字节)"; 
var imgType=new Array("jpg","jpeg","gif","bmp"); 
var isImg=false; 
//文件类型 
if (fileType!=null&&fileType!='') 
{ 
for (var k in imgType){ 
if (fileType.toLowerCase()==imgType[k]){ 
isImg=true; 
break;} 
} 
} 
var tmpObj=document.getElementById("imgView"); 
if (isImg&&tmpObj){ 
var y = document.getElementById(file.name+"img"); 
if(y){ 
y.src = "file://localhost/" + file.value; 
}else{ 
var img=document.createElement("img"); 
img.setAttribute("src","file://localhost/"+file.value); 
img.setAttribute("width","120"); 
img.setAttribute("height","90"); 
img.setAttribute("id",file.name+"img"); 
tmpObj.appendChild(img); 
} 
}} 
}catch(e){ 
//ignore 
} 
} 
else if (!pass) {alert("不允许上传文件类型为:"+fileType);document.getElementById(file.name+'Td').innerHTML = mHTML;} 
else if (!match) {alert("只允许上传文件类型为:"+allowType);document.getElementById(file.name+'Td').innerHTML = mHTML;} 
} 
}

调用方法的代码:
<td width="23%" class="inputTd" id="fileNameTd" colspan="3"> 
<input type="file" name="fileName" class="input100" id="fileName" Tip="无法上传空文件" Usage="notempty" contentEditable="false" tmt:required="true" focusTips="请输入文件名" onChange="getFileInfo(this,10,'','vo.fileName','fileNameTd2','vo.fileType','fileTypeDiv','vo.fileSize','fileSizeDiv')"> 
<input type="hidden" name="vo.fileName" id="vo.fileName"> 
<span id="fileNameDiv" name="fileNameDiv"></span> 
</td>

需要显示当前上传图片的需要加入以下代码:

<div id="imgView"> </div>

简单说明下脚本的相关约定:

1:如必须使用<td>对象来(或者别的有innerHTML属性的对象来包含着input的type="file"的对象,并且名称必须是input的name属性+"Td"为后缀)
2:imgView写死了,由于不想再加入更多的参数,因此,这里就固定这个了。大家也可以把名称作参数传递进去。看各位的方便了。
3:所有参数都可以为''但第一个参数基本上是this。脚本会自动去判断相关的参数的。

Javascript 相关文章推荐
Prototype String对象 学习
Jul 19 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
Dec 24 Javascript
在html页面上拖放移动标签
Jan 08 Javascript
javascript中的self和this用法小结
Feb 08 Javascript
jQuery中:animated选择器用法实例
Dec 29 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
Sep 01 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
Sep 10 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
Oct 27 Javascript
简单理解Vue条件渲染
Dec 03 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
Jan 21 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
Oct 08 Javascript
详解微信小程序动画Animation执行过程
Sep 23 Javascript
javascript smipleChart 简单图标类
Jan 12 #Javascript
javascript Window及document对象详细整理
Jan 12 #Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
Jan 12 #Javascript
奉献给JavaScript初学者的编写开发的七个细节
Jan 11 #Javascript
从盛大通行证上摘下来的身份证验证js代码
Jan 11 #Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
Jan 11 #Javascript
javascript获取当前日期时间及其它操作函数
Jan 11 #Javascript
You might like
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
ExtJS 入门
2010/10/29 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
2011/05/28 Javascript
JQuery动画和停止动画实例代码
2013/03/01 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
Vue如何实现组件的源码解析
2017/06/08 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
微信小程序indexOf的替换方法(推荐)
2020/01/14 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
python中的全局变量用法分析
2015/06/09 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
python爬取哈尔滨天气信息
2018/07/14 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
Python可以实现栈的结构吗
2020/05/27 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
美国知名的在线旅游服务网站:Priceline
2016/07/23 全球购物
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
UDP协议功能
2013/01/06 面试题
财务总经理岗位职责
2014/02/16 职场文书
高中军训感言400字
2014/02/24 职场文书
读书笔记怎么写
2015/07/01 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
Python 线程池模块之多线程操作代码
2021/05/20 Python
Python中time标准库的使用教程
2022/04/13 Python
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android