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 相关文章推荐
php图像生成函数之间的区别分析
Dec 06 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
Oct 13 Javascript
Ztree新增角色和编辑角色回显问题的解决
Oct 25 Javascript
原生js实现放大镜特效
Mar 08 Javascript
Angular 5.0 来了! 有这些大变化
Nov 15 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
Dec 11 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
Jan 15 Javascript
200行HTML+JavaScript实现年会抽奖程序
Jan 22 Javascript
新手快速入门JavaScript装饰者模式与AOP
Jun 24 Javascript
微信小程序获取地理位置及经纬度授权代码实例
Sep 18 Javascript
Vue实现简单购物车功能
Dec 13 Vue.js
一文搞懂redux在react中的初步用法
Jun 09 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
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
Laravel 加载第三方类库的方法
2018/04/20 PHP
深入理解js数组的sort排序
2016/05/28 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
Python中bisect的用法
2014/09/23 Python
Python3.2中的字符串函数学习总结
2015/04/23 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
python中实现词云图的示例
2020/12/19 Python
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
高二物理教学反思
2014/02/08 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
安装工程师岗位职责
2015/02/13 职场文书
培训班通知
2015/04/25 职场文书
资金申请报告范文
2015/05/14 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
家访教师心得体会
2016/01/23 职场文书
升职自荐书
2019/05/09 职场文书
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
MySQL去除密码登录告警的方法
2022/04/20 MySQL