不是用扩展名  真证检测文件 是否为有效文件  public static bool IsAllowedExtension(FileUpload hifile)
     {
         System.IO.FileStream fs = new System.IO.FileStream(hifile.PostedFile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
         System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
         string fileclass = "";
         byte buffer;
         try
         {
             buffer = r.ReadByte();
             fileclass = buffer.ToString();
             buffer = r.ReadByte();
             fileclass += buffer.ToString();         }
         catch 
         {
           
         }
         r.Close();
         fs.Close();
         if (fileclass == "255216" || fileclass == "7173")//说明255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
         {
             return true;
         }
         else 
         {
             return false;
         }     }

解决方案 »

  1.   

    谢谢各位指点,但我的问题是:不是判断文件类型的问题,而是当我在FileUpload控件中的输入框中自己乱敲一串字符,如“sdlkfjsdlkfsl”这样的东西,然后点击自定义的“上传”按钮时,没反应了但如果输入正确的路径和文件名的话倒还可以,是不是控件的问题啊?还有如何屏蔽用户直接输入(也就是说只让用户通过点击控件旁边的“添加”按钮来加入文件名),如何解决?谢谢大家!
      

  2.   

    private string getPicturePash(FileUpload fuPicture)
        {
            string pictureExtension = System.IO.Path.GetExtension(fuPicture.FileName).ToLower();
            string[] allowedExtension = { ".gif", ".png", ".jpeg", ".jpg" };
            bool fileExtension = false;
            for (int i = 0; i < allowedExtension.Length; i++)
            {
                if (pictureExtension == allowedExtension[i])
                {
                    fileExtension = true;
                }
            }
            if (fileExtension)
            {
                return fuPicture.FileName;
            }
            else
            {
                return null;
            }    }
      

  3.   

    string fileName = System.IO.Path.GetFileName(FileUpload1.FileName);
    if (fileName == null  || fileName == string.Empty)
    {
    return "UPERROR";
    }
      

  4.   

    是不是可以使用file.exist这个方法来判断一下?不成熟的想法,有待验证!
      

  5.   

    随便输文件的话FileUpload.HasFile = false
      

  6.   

    用FileUpload1.HasFile判断一下是否存在这个文件,不存在就返回,不执行后面的代码。
    另外LZ是从C/S转过来的吧,MessageBox.Show("只能上传相片!");之类的是不能在Web上用的,要用:
    Response.Write("<script type='text/javascript'>alert('只能上传相片');</script>");
      

  7.   

    谢谢LS的,那个MessageBox我加了一个System.Windows.Forms的引用,可以用的。关键问题是,如果用户在控件中输入(随便输入一串字符,对应的字符找不到文件时),用FileUpload1.HasFile无法判断。不知道怎么搞的。希望大家继续关注!
      

  8.   

    用Javascript可以验证用户胡乱输入的路径是否有效(如下),但那需要降低IE安全级别,不推荐你这样子做,无效的你就直接报错好了,不用去作这种判断。function   ReportFileStatus(filespec)   
      {   
            var   fso,   s   =   filespec;   
            fso   =   new   ActiveXObject("Scripting.FileSystemObject");   
            if   (fso.FileExists(filespec))   
                  s   +=   "   exists.";   
            else     
                  s   +=   "   doesn't   exist.";   
            return(s);   
      }   
      
      

  9.   

    var reg1=new RegExp("^[a-zA-Z]:");            if (!reg1.test(document.form1.all("FileUpload1").value)) 
                 { 
                     alert('璇疯緭鍏ユ纭矾寰勶紒'); 
                    document.form1.all("FileUpload1").focus(); 
                    document.form1.all("FileUpload1").select(); 
                    return false; 
                }