zoukankan      html  css  js  c++  java
  • 使用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         }
  • 相关阅读:
    Java 中常用缓存Cache机制的实现
    Spring普通类获取bean
    系统升级shell
    shell 操作文本内容(修改增加)
    接口实践;接口与抽象类
    Java中@Override的作用
    类实现多个接口的例子
    java 反射实践
    对象主要属性及识别
    java抽象类实践
  • 原文地址:https://www.cnblogs.com/flysnow-z/p/3654244.html
Copyright © 2011-2022 走看看