1 #region 一、 安全性比较低,把文本文件1.txt改成1.jpg照样可以上传,但其实现方法容易理解,实现也简单,所以网上很多还是采取这种方法。 2 Boolean fileOk = false; 3 string path = Server.MapPath("~/images/"); 4 //判断是否已经选取文件 5 if (FileUpload1.HasFile) 6 { 7 //取得文件的扩展名,并转换成小写 8 string fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower(); 9 //限定只能上传jpg和gif图片 10 string[] allowExtension = { ".jpg", ".gif" }; 11 //对上传的文件的类型进行一个个匹对 12 int j = 0; 13 for (int i = 0; i < allowExtension.Length; i++) 14 { 15 if (fileExtension == allowExtension[i]) 16 { 17 fileOk = true; 18 return; 19 } 20 else 21 { 22 j++; 23 } 24 } 25 if (j > 0) 26 { 27 Response.Write("<script>alert('文件格式不正确');</script>"); 28 return; 29 } 30 } 31 else 32 { 33 Response.Write("<script>alert('你还没有选择文件');</script>"); 34 return; 35 } 36 //如果扩展名符合条件,则上传 37 if (fileOk) 38 { 39 FileUpload1.PostedFile.SaveAs(path + FileUpload1.FileName); 40 Response.Write("<script>alert('上传成功');</script>"); 41 } 42 #endregion
1 #region 二、不检测文件后缀而是检测文件MIME内容类型。 2 Boolean fileOk = false; 3 string path = Server.MapPath("~/images/"); 4 //判断是否已经选取文件 5 if (FileUpload1.HasFile) 6 { 7 //取得文件MIME内容类型 8 string type = this.FileUpload1.PostedFile.ContentType.ToLower(); 9 if (type.Contains("image")) //图片的MIME类型为"image/xxx",这里只判断是否图片。 10 { 11 fileOk = true; 12 13 } 14 else 15 { 16 Response.Write("<script>alert('格式不正确')</script>"); 17 } 18 } 19 else 20 { 21 Response.Write("<script>alert('你还没有选择文件');</script>"); 22 } 23 //如果扩展名符合条件,则上传 24 if (fileOk) 25 { 26 FileUpload1.PostedFile.SaveAs(path + FileUpload1.FileName); 27 Response.Write("<script>alert('上传成功');</script>"); 28 } 29 #endregion 30
1 //真正判断文件类型的关键函数 2 public static bool IsAllowedExtension(FileUpload hifile) 3 { 4 System.IO.FileStream fs = new System.IO.FileStream(hifile.PostedFile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); 5 System.IO.BinaryReader r = new System.IO.BinaryReader(fs); 6 string fileclass = ""; 7 //这里的位长要具体判断. 8 byte buffer; 9 try 10 { 11 buffer = r.ReadByte(); 12 fileclass = buffer.ToString(); 13 buffer = r.ReadByte(); 14 fileclass += buffer.ToString(); 15 16 } 17 catch 18 { 19 20 } 21 r.Close(); 22 fs.Close(); 23 if (fileclass == "255216" || fileclass == "7173")//说明255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar 24 { 25 return true; 26 } 27 else 28 { 29 return false; 30 } 31 32 }