• 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。脚本会自动去判断相关的参数的。

     原创作品出自努力偷懒,转载请说明文章出处http://www.cnblogs.com/kfarvid/

  • 相关阅读:
    防止域名恶意指向的解决办法
    Spring @Configuration @Import
    CAS 集成认证
    远程桌面登录蓝色屏幕、不显示桌面怎么解决?
    终端服务器超出了最大允许连接数
    Fiddler 常见几种解决捕获不到请求的方法
    android TimerTask 的简单应用
    Android 数字签名学习笔记
    Android 遍历卡数据并按图片,音乐等分类保存
    Android 最简单的SD卡文件遍历程序
  • 原文地址:https://www.cnblogs.com/kfarvid/p/1931518.html
Copyright © 2020-2023  润新知