经常在网上看到说由于安全问题,新出的浏览器已经屏蔽了预览及检测本地文件的功能,也就是说在上传前已无法再检测文件大小了,只有传到服务器上由服务器检测。
可问题是,我发现很多大网站,如网易,在我们上传大邮件前,还是在一瞬间就检测出了文件大小是否超过限制,很明显是在客户端检测的,请问是采用的什么机制。哪位网友在这方面有研究吗,能否提供些实例代码或解决方案。

解决方案 »

  1.   

    <script type="text/javascript">  
    //检查用户是否选择了上传的文件   
    function check()   
    {   
    if(document.form1.FILE1.value=="")   
    {   
       alert("请选择上传文件");   
       return false;   
    }else   
    {   
       if(ShowFolderSize(document.form1.FILE1.value))   
       {   
        return true;   
       }   
    }   
    return false;   
      
    }   
      
    //验证文件大小   
    function ShowFolderSize(filespec)   
    {   
       var fso, f;   
       var maxsize=1000000;//定义允许文件的大小,单位B   
       fso = new ActiveXObject("Scripting.FileSystemObject");   
          
       if (fso.FolderExists(filespec))   
       {   
          f = fso.GetFolder(filespec);   
       }   
       else if (fso.FileExists(filespec))   
       {   
          f = fso.GetFile(filespec);   
       }   
       else   
       {   
       alert("该文件不存在!");   
    return false;   
       }   
       if(f.size>maxsize)   
       {   
       alert("文件大小超出规定,请您选择小于"+maxsize+"字节的文件进行上传");   
    return false;   
       }   
       return true;   
    }   
    </script>  
      
    <body bgcolor="#ffffff">  
    <form name="form1" METHOD="POST" ACTION=uploadfile.jsp ENCTYPE="multipart/form-data">  
    <INPUT TYPE="FILE" NAME="FILE1" SIZE="30" id="myfile">  <INPUT TYPE="submit" onClick="return check()" VALUE="上传">  
    </form>  
    </body>
      

  2.   

    支持HTML5的浏览器可以直接可以通过inputFile.files[0].size得到文件尺寸,不支持的话可以使用SwfUpload等Flash上传组件。
      

  3.   

    浏览器为了安全起见,是不允许使用FSO对象的啊
      

  4.   

    不仅是网易可以检测,QQ邮箱也可以检测,115网盘也可以检测,华为网盘(DBank)也可以检测。他们都是使用控件来实现这个功能的。
      

  5.   

    你这个需求要使用控件来实现。楼主试试这个控件:http://www.cnblogs.com/xproer/archive/2010/10/24/1859895.html
    此控件是基于标准HTTP协议实现的文件上传功能。优势是扩展性非常好,整合简单,支持批量上传文件和上传文件夹功能,适合各种简单WEB项目。
    另外一个特点是支持自动上传指定的本地文件。单文件上传演示上传本地文件代码
    使用步骤如下:
    1.调用AddFile函数添加本地文件,注意路径需要使用双斜框(\\)
    2.调用PostFirst函数开始上传文件。<script type="text/javascript" language="javascript">
         var uploaderMgr = new HttpUploaderMgr();
         uploaderMgr.Load();//加载控件 window.onload = function()
    {
    uploaderMgr.Init();//初始化控件
    //添加一个本地文件
    uploaderMgr.AddFile("D:\\Soft\\QQ2010.exe");
    uploaderMgr.PostFirst(); };
    </script>
     单文件整合代码: 服务器返回消息:<input id="txtFilePath" type="text" size="50" />
    <script type="text/javascript" language="javascript">
    var uploaderMgr = new HttpUploaderSingleMgr();
    uploaderMgr.Config["PostUrl"] = "http://localhost:8080/asp.net/upload.aspx";
    uploaderMgr.Load();
    //文件上传完成后执行的回调函数
    uploaderMgr.CompleteHook = function(msg)
    {
    document.getElementById("txtFilePath").value = msg;
    }; window.onload = function()
    {
    uploaderMgr.Init();
    };
    </script>示例下载:
    CAB安装包
    开发文档
    ASP示例
    ASP.NET示例
    JSP示例
    PHP示例