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

为了提高效率,很多时候需要在web页面中对客户端上传的文件进行验证,然后再上传到服务器。下面是我写的一个通用的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">&nbsp;</div>

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

1:如必须使用<td>对象来(或者别的有innerHTML属性的对象来包含着input的type="file"的对象,并且名称必须是input的name属性+"Td"为后缀)

2:imgView写死了,由于不想再加入更多的参数,因此,这里就固定这个了。大家也可以把名称作参数传递进去。看各位的方便了。

3:所有参数都可以为''但第一个参数基本上是this。脚本会自动去判断相关的参数的。

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信博6主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值