以前我都是判断扩展名,后来发现不太好.就找到了如下代码,但是本地可以运行.一传到服务器上就不行了.好像是需要什么权限吧?
服务器商又不给开权限(强烈鄙视咱们国家的垃圾服务器提供商),谁能给段代码验证一下文件类型啊?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.   

    .aspx
    <input id="File1" type="file" style="width:240px" runat="server" name="files"/>
    .cs:
    string filetype = this.File1.PostedFile.ContentType;
      

  2.   

    就是检查文件的PE结构。用来确认文件是否被恶意修改。用16进制的编辑器打开文件,就可以看到文件头的规律了。在用windows计算机转换为10进制。 FileStream stream = new FileStream(sFileName, FileMode.Open, FileAccess.Read);
    读取前面几个字节用来效验。
      

  3.   

    比如用16进制打开winrar文件的,对比几个rar文件可以得到相同的地方,把16进制10进制转换为得到byte[] HEADER= new byte[] { 82, 97, 114, 33, 26, 7, 0 };
     byte[] buffer;
                FileStream stream = new FileStream(FileName, FileMode.Open, FileAccess.Read);
     stream.Read(buffer, 0, 7);循环比较一下buffer 和 HEADER是否一样。
      

  4.   


    if(this.FileUp.PostedFile.ContentType == "image/pjpeg" || this.FileUp.PostedFile.ContentType == "image/bmp" || this.FileUp.PostedFile.ContentType == "image/gif" || this.FileUp.PostedFile.ContentType == "image/x-png" && FileUp.PostedFile.ContentLength < 2 * 1024 * 1024) 

    this.FileUp.PostedFile.SaveAs(Server.MapPath("../UpFiles/") + "\\" + fileName); 
    this.UploadPan.Visible = false; 
    this.UploadedPan.Visible = true; 
    this.CopyTxt.Value = "../UpFiles/" + fileName; 

    else 

    this.message.Text = "文件格式不正确/或者文件过大!"; 
    }