fileupload上传文件时,超过默认的4M,点上传,直接进入服务器报错页面,怎么样在上传前,判断上传文件的大小,如果文件超过2M就弹出提示,不让上传呢,或者捕捉报错,不显示服务器的报错页面而显示自己定义的页面呢.
网上搜了一大圈,还是没找到满意的答案.
我知道可以在web.config里改上传大小限制,最大可以改到2G,但这样也不太理想,因为用fileupload服务器读取文件信息是在文件上传完后才读取的,当用户点了一个几百M的文件上传时,结果等半天,才弹出一个提示框,文件过大.......
try catch也捕捉不了异常,好象超过了上传限制,就根本不执行后台的代码了.
用javascript也没找到好方法,网上说ie6能通过,但在ie7中就不行.哪位朋友有什么好的方法,分享一下吧,谢谢啦,

解决方案 »

  1.   

     <httpRuntime maxRequestLength="51200" executionTimeout="3600"  appRequestQueueLimit="10000"/>
    文件大小只能去服务器上判断,扩展名可以用客户端的
    使用其他控件如
    http://www.open-open.com/ajax/Upload.htm
      

  2.   

    这个方法我也知道,就是在web.config里改上传上限,可时我本来只要求能上传2M以下的文件,当用户点了个几百M的文件上传时,等半天(文件传到服务器)后,才弹出对话框:文件不能超过2M.感觉不太合理
      

  3.   

       if (Request.TotalBytes>2*1024*1024)
           {
               Response.Write("<script>alert('文件不能超过2M!');</script>");
           }
           
      

  4.   

    帮LZ顶一下,在后台判断不行吗,要不然写个兼容的js判断吧!
      

  5.   

    后台判断,超过了web.config里设置的上传上限就判断不了了.兼容的js怎么写啊.
      

  6.   

    坐等答案,这问题一直困扰我,没有有效的方法判断文件大小,在web.config里设置根本不可行
    上传大文件,浏览器会假死直至超时
      

  7.   

    1、这是没有办法解决的问题,因为上传的文件要通过网络检测,在本地是很快,但到网上,才几M就很慢了!
    2、
    if (Request.TotalBytes>2*1024*1024)
      {
      Response.Write("<script>alert('文件不能超过2M!');</script>");
      }
    这样限制大小是不合理的,因为如果你上传的文件超过web.config里面限制的大小时,更本就不执行服务器。
    3、解决的办法,我想到一个,就是把这种形式改成FTP上传。
      

  8.   

    <httpRuntime maxRequestLength="51200" executionTimeout="3600" appRequestQueueLimit="10000"/>
      这个就是对的
      

  9.   

    应用层ftp上传的话是能直接通过代码进行限制,而且上传的速度也较快
      

  10.   

    <httpRuntime maxRequestLength="51200" executionTimeout="3600" appRequestQueueLimit="10000"/>
      

  11.   

    第一种方法:上传之前判断   HttpPostedFile hf = Request.Files[0];//取得控件
                if (hf.ContentLength > 0)//是否有图片
                {
                    int fileSize = 0;
                    fileSize = hf.ContentLength;//取得大小
                    if (fileSize < 2097152)//判断大小 单位字节
                    {
                       
                    }
                    else
                    {
                        MessageBox.Show(this.Page, "图片大小不能超过2M");
                        return;
                    }
                }
      

  12.   

    第二种js判断,选择图片之后就判断是否为图片格式(非后缀名判断,防止改后缀名上传木马),大小<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
    <title>图片上传js判断</title>
    <script type="text/javascript">
        var isimg = true;
        var img = null;
        function chksize() {
            if (img) img.removeNode(true);
            img = document.createElement("img");
            img.style.position = "absolute";
            img.style.visibility = "hidden";
            img.width = 0;
            img.height = 0;
            img.attachEvent("onreadystatechange", orsc);
            img.attachEvent("onerror", oe);
            document.body.insertAdjacentElement("beforeend", img);
            img.src = document.getElementById("flTitleImg").value;
            if (isimg == true) {
                document.getElementById('imgPreview').src = document.getElementById("flTitleImg").value;
            }
        }
        function oe() {
            isimg = false;
            alert("您选择的文件不是图片格式!");
            document.getElementById('imgPreview').src = '/images/nopic.gif';
            document.getElementById("fmUpoload").reset();
        }    function orsc() {
            if (img.readyState != "complete") return false;
            if (img.fileSize > 1048576) {
                document.getElementById('imgPreview').src = '/images/nopic.gif';
                alert("您上传的图片超过了1M,请重新选择!!");
                document.getElementById("fmUpoload").reset();
            }
        }     
    </script>
    </head>
    <body>
    <form id="fmUpoload" method="post"  runat="server" enctype="multipart/form-data" name="fmUpoload">
      <table class="style1">
        <tr>
          <td class="style2"> 图片上传:</td>
          <td><input type="file" name="flTitleImg" id="flTitleImg" onchange="chksize()"  runat="server"/>
            <asp:Button ID="btnUpload" runat="server" Text="上传" onclick="btnUpload_Click" /></td>
        </tr>
        <tr>
          <td class="style2"> 图片预览:</td>
          <td><img alt="图片预览" src="/images/nopic.gif" id="imgPreview" style="width:120;height:90px"/></td>
        </tr>
      </table>
    </form>
    </body>
    </html>
      

  13.   

    uploadify,一个jQuery扩展插件,应该能解决LZ问题
      

  14.   

    后台写代码判断
    HttpPostedFile upFile = this.FileUpload1.PostedFile;
    int fileLength = upFile.ContentLength;//获取上传文件大小,以字节为单位
      

  15.   

    1。web.config中配置上传文件大小上限2。后台中判断
      

  16.   

    <asp:FileUpload ID="FileUpload1" runat="server" />FileUpload1.FileContent.Length;获取文件大小。
      

  17.   

    直觉告诉我,如果要解决LZ的问题,需要在客户端进行验证但你是知道的,js是不能访问本地文件的,因为只能借助第三方控件。我知道swfupload是可以实现这一点的,楼主可以参考一下。
      

  18.   

    这个是没办法的  不管你如何判断。。都是先上传 后判断。。那时候已经晚了
    如LS所说  上传的话 还是用  swfupload  。。可以解决你的问题再大点的话 用 NeatUpload