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 相关文章推荐
javascript学习笔记(三)显示当时时间的代码
Apr 08 Javascript
jQuery实用密码强度检测
Mar 02 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
Jun 07 Javascript
JS写谷歌浏览器chrome的外挂实例
Jan 11 Javascript
jQuery实现左右滑动的toggle方法
Mar 03 jQuery
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
May 08 Javascript
深入理解js 中async 函数的含义和用法
May 13 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
Jun 03 Javascript
vue.js中导出Excel表格的案例分析
Jun 11 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
Sep 15 Javascript
构建Vue大型应用的10个最佳实践(小结)
Nov 07 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
Apr 16 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
Syphon 使用方法
2021/03/03 冲泡冲煮
php Smarty初体验二 获取配置信息
2011/08/08 PHP
php后门URL的防范
2013/11/12 PHP
PHP常用数组函数介绍
2014/07/28 PHP
分享PHP守护进程类
2015/12/30 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
2017/04/03 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
JavaScript实用技巧(一)
2010/08/16 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
jquery原理以及学习技巧介绍
2015/11/11 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
vue 中引用gojs绘制E-R图的方法示例
2018/08/24 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
video.js添加自定义组件的方法
2020/12/09 Javascript
讲解Python中的递归函数
2015/04/27 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
Python numpy数组转置与轴变换
2019/11/15 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
ddl,dml和dcl的含义
2016/05/08 面试题
大学军训感言1500字
2014/03/09 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
学生会宣传部部长竞选演讲稿
2014/04/25 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
党员志愿者活动总结
2014/06/26 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
党支部审查意见
2015/06/02 职场文书