本帖最后由 chate 于 2010-02-04 23:48:30 编辑

解决方案 »

  1.   


    function up(){
      var file=getElementByName("file_info.file_image").value;
        j = (file.length)-(file.lastIndexOf(".jpg"));
          k = (file.length)-(file.lastIndexOf(".gif"));
          l = (file.length)-(file.lastIndexOf(".doc"));
          m = (file.length)-(file.lastIndexOf(".txt"));
          if(j!=4 && k!=4 && l!=4 && m!=4){
            return;
          }
          
          var filesize=getFileSize(file);
      filesize=Math.floor(filesize/1024+0.5);
      if(filesize>10240)return;
     
        document.forms[0].submit();
    }//获得文件大小
    function getFileSize(path){
       var fso=new ActiveXObject("Scripting.FileSystemObject");
       var file=fso.GetFile(path);
       return file.Size;
    }
      

  2.   

    回2楼:
    代码测试没有通过,点击“浏览”按钮没有任何反应(我要的是客户端判断代码)。以下是全部代码,不知是不是我应用的错误:
      <script   language="JavaScript">       
    function up(){ 
      var file=getElementByName("file_info.file_image").value; 
        j = (file.length)-(file.lastIndexOf(".jpg")); 
          k = (file.length)-(file.lastIndexOf(".gif")); 
          l = (file.length)-(file.lastIndexOf(".doc")); 
          m = (file.length)-(file.lastIndexOf(".txt")); 
          if(j!=4 && k!=4 && l!=4 && m!=4){ 
          return; 
          } 
          
          var filesize=getFileSize(file); 
    filesize=Math.floor(filesize/1024+0.5); 
    if(filesize>1024)return;   document.forms[0].submit(); 
    } //获得文件大小 
    function getFileSize(path){ 
      var fso=new ActiveXObject("Scripting.FileSystemObject"); 
      var file=fso.GetFile(path); 
      return file.Size; 
    }  </script>       
    <form action='<%= Request.ServerVariables("URL") %>' method='post' name="upform" onsubmit="return ValidInput()"  enctype="multipart/form-data">
    文件上传:
    <input type='file' name='upfile' size="40" onclick="up()">
    </form>另外,我用“文件上传前台控制检测程序 v0.6”已经测试故通过,是可以在客户端判断的!只是不能完全兼容IE8——IE8禁止获取客户端路径,上传部分需要修改。
    谢谢各位!
      

  3.   


    <input type='button' name='btn_' size="40" onclick="up()"> 
      

  4.   

    用image来load文档之类的文件来判断大小好像是不行的吧,我之前测试过是无效的,只有对图片有效
      

  5.   

    谢谢danier_sky。但这句和我的<input type='file' name='upfile' size="40" onclick="up()">有区别吗?我这句里面也是一个“浏览”按钮。
    并且把上面的代码改为:
    <form action=' <%= Request.ServerVariables("URL") %>' method='post' name="upform" onsubmit="return ValidInput()"  enctype="multipart/form-data"> 
    文件上传: 
    <input type='file' name='upfile' size="40" onclick="up()"> 
    <input type='button' name='btn_' size="40" onclick="up()">
    </form> 
    按了你的按钮没反应。回7楼:我只测试图片文件,通不过。
      

  6.   

    function up(){
      var file=getElementByName("file_info.file_image").value;
        j = (file.length)-(file.lastIndexOf(".jpg"));
          k = (file.length)-(file.lastIndexOf(".gif"));
          l = (file.length)-(file.lastIndexOf(".doc"));
          m = (file.length)-(file.lastIndexOf(".txt"));
          if(j!=4 && k!=4 && l!=4 && m!=4){
          return;
          }
         
          var filesize=getFileSize(file);
    filesize=Math.floor(filesize/1024+0.5);
    if(filesize>10240)return;  document.forms[0].submit();
    }//获得文件大小
    function getFileSize(path){
      var fso=new ActiveXObject("Scripting.FileSystemObject");
      var file=fso.GetFile(path);
      return file.Size;
    }
      

  7.   

     var file=getElementByName("upfile").value; 
    兄弟有些代码自己要小小修改的压
      

  8.   


     控制上传file的文件类型
    <input type="file" onchange="checkExt(this)"/><script type="text/javascript"> 
    var checkExt=function(file) {
        if(!(/(?:jpg|gif)$/i.test(file.value))) {
            alert("只允许上传jpg和gif的图片");
            if(window.ActiveXObject) {//for IE
                file.select();//select the file ,and clear selection
                document.selection.clear();
            } else if(window.opera) {//for opera
                file.type="text";file.type="file";
            } else file.value="";//for FF,Chrome,Safari
        } else {
            alert("ok");//or you can do nothing here.
        }
    };
    </script>
      

  9.   

    用flash,可以在上传文件之前直接获取客户端文件大小
      

  10.   

    很惭愧,我对代码一知半解,边写边学。
    把这句分别替换“var file=getElementByName("file_info.file_image").value;”和“var file=fso.GetFile(path);”都没有反应,无法区分文件大小和类型。我用的是IE8。只能连续回复3次,所以只好在一个帖子里回复各位了:
    9楼代码同样无效。不知大家的代码在自己机器上测试过没有?
    12楼:我试过Flash的swfupload。但ASP代码无法上传中文文件名,所以才要自己写的!
      

  11.   

    在IE6上没问题。
    下面这些代码在IE8可以判断类型,但由于IE8不允许获取路径,所以不确定能否判断大小(IE6均可判断):<title>文件上传前台控制检测程序 v0.6</title>
    <style>
    body,td{font-size:12px;}
    </style>
    <script language=javascript>
    /*----------------------------------------
      For 51js  Author:333 Date:2005/08/26
            UpDate:2005/09/03
     -----------------------------------------*/var ImgObj=new Image();      //建立一个图像对象var AllImgExt=".jpg|.jpeg|.gif|.bmp|.png|"//全部图片格式类型
    var FileObj,ImgFileSize,ImgWidth,ImgHeight,FileExt,ErrMsg,FileMsg,HasCheked,IsImg//全局变量 图片相关属性//以下为限制变量
    var AllowExt=".jpg|.gif|.doc|.txt|"  //允许上传的文件类型 ?为无限制 每个扩展名后边要加一个"|" 小写字母表示
    //var AllowExt=0
    var AllowImgFileSize=200;    //允许上传图片文件的大小 0为无限制  单位:KB 
    var AllowImgWidth=1024;      //允许上传的图片的宽度 ?为无限制 单位:px(像素)
    var AllowImgHeight=768;      //允许上传的图片的高度 ?为无限制 单位:px(像素)HasChecked=false;function CheckProperty(obj)    //检测图像属性
    {
      FileObj=obj;
      if(ErrMsg!="")      //检测是否为正确的图像文件 返回出错信息并重置
      {
        ShowMsg(ErrMsg,false);
        return false;      //返回
      }  if(ImgObj.readyState!="complete")  //如果图像是未加载完成进行循环检测
      {
        setTimeout("CheckProperty(FileObj)",500);
        return false;
      }  ImgFileSize=Math.round(ImgObj.fileSize/1024*100)/100;//取得图片文件的大小
      ImgWidth=ImgObj.width      //取得图片的宽度
      ImgHeight=ImgObj.height;    //取得图片的高度
      FileMsg="\n图片大小:"+ImgWidth+"*"+ImgHeight+"px";
      FileMsg=FileMsg+"\n图片文件大小:"+ImgFileSize+"Kb";
      FileMsg=FileMsg+"\n图片文件扩展名:"+FileExt;  if(AllowImgWidth!=0&&AllowImgWidth<ImgWidth)
        ErrMsg=ErrMsg+"\n图片宽度超过限制。请上传宽度小于"+AllowImgWidth+"px的文件,当前图片宽度为"+ImgWidth+"px";  if(AllowImgHeight!=0&&AllowImgHeight<ImgHeight)
        ErrMsg=ErrMsg+"\n图片高度超过限制。请上传高度小于"+AllowImgHeight+"px的文件,当前图片高度为"+ImgHeight+"px";  if(AllowImgFileSize!=0&&AllowImgFileSize<ImgFileSize)
        ErrMsg=ErrMsg+"\n图片文件大小超过限制。请上传小于"+AllowImgFileSize+"KB的文件,当前文件大小为"+ImgFileSize+"KB";  if(ErrMsg!="")
        ShowMsg(ErrMsg,false);
      else
        ShowMsg(FileMsg,true);
    }ImgObj.onerror=function(){ErrMsg='\n图片格式不正确或者图片已损坏!'}function ShowMsg(msg,tf)  //显示提示信息 tf=true 显示文件信息 tf=false 显示错误信息 msg-信息内容
    {
      msg=msg.replace("\n","<li>");
      msg=msg.replace(/\n/gi,"<li>");
      if(!tf)
      {
        document.all.UploadButton.disabled=true;
        FileObj.outerHTML=FileObj.outerHTML;
        MsgList.innerHTML=msg;
        HasChecked=false;
      }
      else
      {
        document.all.UploadButton.disabled=false;
        if(IsImg)
          PreviewImg.innerHTML="<img src='"+ImgObj.src+"' width='60' height='60'>"
        else
          PreviewImg.innerHTML="非图片文件";
        MsgList.innerHTML=msg;
        HasChecked=true;
      }
    }function CheckExt(obj)
    {
      ErrMsg="";
      FileMsg="";
      FileObj=obj;
      IsImg=false;
      HasChecked=false;
      PreviewImg.innerHTML="预览区";
      if(obj.value=="")return false;
      MsgList.innerHTML="文件信息处理中...";
      document.all.UploadButton.disabled=true;
      FileExt=obj.value.substr(obj.value.lastIndexOf(".")).toLowerCase();
      if(AllowExt!=0&&AllowExt.indexOf(FileExt+"|")==-1)  //判断文件类型是否允许上传
      {
        ErrMsg="\n该文件类型不允许上传。请上传 "+AllowExt+" 类型的文件,当前文件类型为"+FileExt;
        ShowMsg(ErrMsg,false);
        return false;
      }  if(AllImgExt.indexOf(FileExt+"|")!=-1)    //如果图片文件,则进行图片信息处理
      {
        IsImg=true;
        ImgObj.src=obj.value;
        CheckProperty(obj);
        return false;
      }
      else
      {
        FileMsg="\n文件扩展名:"+FileExt;
        ShowMsg(FileMsg,true);
      }
      
    }function SwitchUpType(tf)
    {
        if(tf)
         str='<input type="file" name="file1" onchange="CheckExt(this)" style="width:180px;">'
        else
         str='<input type="text" name="file1" onblur="CheckExt(this)" style="width:180px;">'
        document.all.file1.outerHTML=str;
        document.all.UploadButton.disabled=true;
        MsgList.innerHTML="";
    }</script>
    <form enctype="multipart/form-data" method="POST" onsubmit="return HasChecked;">
    <fieldset style="width: 372; height: 60;padding:2px;">
    <legend><font color="#FF0000">图片来源</font></legend>
    <input type="radio" name="radio1" checked onclick="SwitchUpType(true);">本地<input type="radio" name="radio1" onclick="SwitchUpType(false);">远程:<input type="file" name="file1" onchange="CheckExt(this)" style="width:180px;"> <input type="submit" id="UploadButton" value="开始上传" disabled><div style="border:1 solid #808080;background:#E0E0E0;width100%;height:20px;color:#606060;padding:5px;">
    <table border="0"><tr><td width="60" id="PreviewImg">预览区</td><td id="MsgList" valign="top"></td></tr></table>
    </div>
    </fieldset>
    </form>
      

  12.   

    用 Flash .....比JS 还要简单
      

  13.   

    还是用JS比较方便啊,不过要提前设置好安全性,就是要客户端允许执行你的js,
    不过现在的杀毒软件都比较变态,
    还是做个activeX控件什么的吧,
    总之这种依赖浏览器的东西,想做点事,太难了....
      

  14.   

    同12楼:我试过Flash的swfupload。但ASP代码无法上传中文文件名,所以才要自己写的!回复20楼:确实比较困难,这么长时间了也结不了贴!祝各位春节快乐!
      

  15.   

    今天用ASP版本的swfupload,居然可以上传中文文件名了!!!上班以后多找几台电脑试试再说!
    既然Flash里的脚本语言可以实现,像我在16楼那样直接写的代码经过修改也应该可以支持ie8。谁能修改一下?另外我下载的那个ASP版本的swfupload不能限制文件大小和类型,谁有比较好的ASP版本的swfupload?
      

  16.   

    <script language="javascript" type="text/javascript">
    var   img   =   null; 
    function getFileSize(filename)
    {
    if(img)img.removeNode(true);
    img=document.createElement("img");
    img.style.position="absolute";
    img.style.visibility="hidden";
    img.attachEvent("onreadystatechange",orsc);
    img.attachEvent("onerror",oe);
    document.body.insertAdjacentElement("beforeend",img);
    img.src=filename;
    }
    function oe()
    {
    alert("cant load img");
    }
    function orsc()
    {
    if(img.readyState!="complete")return false;
    //alert("图片尺寸:"+img.fileSize);
    if(img.fileSize>2*1024)
    {
    alert("上传文件大小不能超过2M");
    window.location.href=window.location.href;
    return false;
    }
    }
    </script>
    <input type="file" name="file1" class="input1" onpropertychange="getFileSize(this.value)">支持IE6,经过测试通过,IE8不支持