使用ASP.NET 上传文件 三种类型判断方法(后缀,MIME,数据流)

 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         }

 

你可能感兴趣的:(asp.net)