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 相关文章推荐
js鼠标及对象坐标控制属性详细解析
Dec 14 Javascript
jquery等待效果示例
May 01 Javascript
基于jQuery实现复选框是否选中进行答题提示
Dec 10 Javascript
JS动态插入并立即执行回调函数的方法
Apr 21 Javascript
如何实现json数据可视化详解
Nov 24 Javascript
vue双向绑定简要分析
Mar 23 Javascript
Node.js 使用命令行工具检查更新
Jun 08 Javascript
JavaScript常见JSON操作实例分析
Aug 08 Javascript
浏览器事件循环与vue nextTicket的实现
Apr 16 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
Sep 10 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
May 23 Javascript
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 Vue.js
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+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
一段实用的php验证码函数
2016/05/19 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
基于BootStrap的图片轮播效果展示实例代码
2016/05/23 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
ES6 更易于继承的类语法的使用
2019/02/11 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
python中的错误处理
2016/04/10 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
面试后感谢信怎么写
2014/02/01 职场文书
实习生求职自荐信
2014/02/07 职场文书
高职教师先进事迹材料
2014/08/24 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python