1.我要限制上传文件的大小
2.不要在webconfiger中写( <httpRuntime maxRequestLength="" executionTimeout="" />暂不需要)
3.我用的是File Field控件,选了 "作为服务器端控件运行" 
用的是
(
Size = this.File1.PostedFile.ContentLength;  //获得上传文件的大小
if((imgSize/1024)>200)  //文件大小不能超过200k
{
  Response.Write("文件太大");
}

这个方法不好,需要大量时间
如何能在客户端就判断出大小呢??
不限于此控件,各种方法都行,例如组件,自定义控件....等 只要实现就好

解决方案 »

  1.   

    <script>
    function GetFileSize()
    {
    var filename=document.all.File.value;
    if(filename=='')
    {
    return false;
    }
    try
    {
    var ado_stream=new ActiveXObject("ADODB.Stream");
    //1=adTypeBinary;2=adTypeText
      ado_stream.Type=2;
      ado_stream.Open();
      ado_stream.LoadFromFile(filename);//将文件信息存入流
    alert((ado_stream.Size/1024).toFixed(2)+"KB")
    }
    catch(e)
    {
    window.confirm(e);
    return false;
    }
    return true;
    }
    </script>
    <input type=file id="File"><input type=button onclick="GetFileSize()">
    楼主,我在JS社区找的。
      

  2.   

    function get_file_size(oStr)
    {
    if(fso.FileExists(oStr))
    {
    var oaFile = fso.GetFile(oStr);
    var oSize = oaFile.Size;
    return oSize;
    }
    else
    {
    return -1;
    }
    }
      

  3.   

    fso = new ActiveXObject("Scripting.FileSystemObject");
      

  4.   

    上面所写的在客户端以脚本的方式预先获取客户端的文件大小,我觉得行不通.
    因为以客户端操作客户硬盘上的文件,需要很大的权限,最低限度,也需要客户端你的网站设置为信任站点.
    我尝试使用 adandelion(猪头) 提供的代码,在本机上试验了一下,并且把运行的站点设置为信任站点,仍然出现错误的提示.
      

  5.   

    还是不要用WEB方式上传太大的文件,不合适。
      

  6.   

    我刚好遇到这个问题,顺便帮你顶一下:
    如果在客户端判断的话要用ActiveX的fso组件,但这样要求在客户端把ie的安全性设置调低(要放松对ActiveX的限制),因为这样我放弃的这个方法,具体程序如下(确实可行):
    <script language="JavaScript">  
    <!--  
    function ShowSize(files)  
    {  
      var fso,f,s;  
      fso=new ActiveXObject("Scripting.FileSystemObject");  
      f=fso.GetFile(files);  
      if((f.size/(1024*1024))>4){
      alert("对不起,上传的文件不能大于4兆!!");
      return false;
      }
      else
      return true;
    }  
    //-->  
    </script>
    <input id="klfile"  type="file" size="25" name="klfile" runat="server" onChange="return ShowSize(klfile.value)">
    另外,我现在选择在服务器端判断,但现在在服务器上判断又遇到新问题了,就是IIS最多只支持4兆,多于4兆就上传出错,有什么方法请通知我一声,呵呵
      

  7.   

    我找到解决方法了,^_^,刚刚找到。是在服务器上判断的
    在webconfig文件中设置<httpRuntime executionTimeout="300" maxRequestLength="100960" useFullyQualifiedRedirectUrl="false"/> ,这样IIS最大能通过的文件是10M左右,然后就能在程序中作出判断,部分程序如下:
    FileSize1 = klfile.PostedFile.ContentLength / (1024 * 1024)
            If (FileSize1 > 4) Then
                Response.Write("<script>javascript:alert('服务器说:对不起,上传的文件不能大于4兆');</script>")
            Else
            '执行上传操作
            End If
    希望能帮到你^_^