日期:2014-05-16  浏览次数:20310 次

js判断上传文件的类型
/**
 * 对所选择的文件类型加以判断,目前只支持zip和rar格式的文件。
 */
function fileCheck(){
  var postfix = form1.fileUpload.value.match(/^(.*)(\.)(.{1,8})$/)[3].toLowerCase(); //获得选择的上传文件的后缀名的正则表达式
  if(!(postfix == "rar"||postfix == "zip")) 
   { 
     alert('文件类型不正确,请选择.rar或者.zip文件 !'); 
     var nf = form1.fileUpload.cloneNode(true); 
       nf.value=''; 
       form1.fileUpload.parentNode.replaceChild(nf, form1.fileUpload); 
     return false; 
   } 
}


上述代码参考了以下内容:
[harbey]http://harbey.iteye.com/blog/416042

用js来控制文件上传类型的时候,按照如下代码进行控制的时候,我第一次选择一个文件,会触发onchange事件,但是我把内容清空,在选择同样的文件,就不触发onchange事件了;代码如下:
function isValidateFile(obj){ 
    var extend = obj.value.substring(obj.value.lastIndexOf(".")+1); 
    if(extend==""){ 
    }else{ 
if(!(extend=="xls"||extend=="doc")){ 
   alert("请上传后缀名为xls或doc的文件!"); 
   obj.select(); 
            document.execCommand('delete'); 
   return false; 
} 
    } 
     return true; 
} 

可能是上述方法只是清空了页面上的显示值,而没有删除第一次选择文件的实际值,所以,再第二次上传同样文件的时候,前后两次的值是相同的,所以不粗放onchange事件;

修改为如下代码后,就满足需求:
function isValidateFile(obj){ 
    var extend = obj.value.substring(obj.value.lastIndexOf(".")+1); 
    if(extend==""){ 
    }else{ 
if(!(extend=="xls"||extend=="doc")){ 
   alert("请上传后缀名为xls或doc的文件!"); 
   var nf = obj.cloneNode(true); 
            nf.value=''; 
            obj.parentNode.replaceChild(nf, obj); 
   return false; 
} 
    } 
     return true; 
} 
1 楼 pkfajax 2011-03-03  
感觉这些判断都不是很严谨,要是用户新建一个txt,修改了后缀名怎么判断?
2 楼 ocaicai 2011-08-25  
pkfajax 写道
感觉这些判断都不是很严谨,要是用户新建一个txt,修改了后缀名怎么判断?

验证分前台和后台验证,就前台而言楼主的思路是对的!