asp.net判断上传文件类型的三种方法

伊谢尔伦
Libérer: 2016-11-25 09:09:06
original
1585 Les gens l'ont consulté

 一、 安全性比较低,把文本文件1.txt改成1.jpg照样可以上传,但其实现方法容易理解,实现也简单,所以网上很多还是采取这种方法。

Boolean fileOk = false;
          string path = Server.MapPath("~/images/");
          //判断是否已经选取文件
          if (FileUpload1.HasFile)
          {
              //取得文件的扩展名,并转换成小写
              string fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
              //限定只能上传jpg和gif图片
              string[] allowExtension = { ".jpg", ".gif" };
              //对上传的文件的类型进行一个个匹对
              int j = 0;
              for (int i = 0; i < allowExtension.Length; i++)
              {
                  if (fileExtension == allowExtension[i])
                  {
                      fileOk = true;
                      return;
                  }
                  else
                  {
                      j++;
                  }
              }
              if (j > 0)
              {
                  Response.Write("<script>alert(&#39;文件格式不正确&#39;);</script>");
                  return;
              }
          }
          else
          {
              Response.Write("<script>alert(&#39;你还没有选择文件&#39;);</script>");
              return;
          }
          //如果扩展名符合条件,则上传
          if (fileOk)
          {
              FileUpload1.PostedFile.SaveAs(path + FileUpload1.FileName);
              Response.Write("<script>alert(&#39;上传成功&#39;);</script>");
          }
Copier après la connexion

二、不检测文件后缀而是检测文件MIME内容类型。

Boolean fileOk = false;
           string path = Server.MapPath("~/images/");
           //判断是否已经选取文件
           if (FileUpload1.HasFile)
           {
               //取得文件MIME内容类型
               string type = this.FileUpload1.PostedFile.ContentType.ToLower();
               if (type.Contains("image"))    //图片的MIME类型为"image/xxx",这里只判断是否图片。
               {
                   fileOk = true;
 
               }
               else
               {
                   Response.Write("<script>alert(&#39;格式不正确&#39;)</script>");
               }
           }
           else
           {
               Response.Write("<script>alert(&#39;你还没有选择文件&#39;);</script>");
           }
           //如果扩展名符合条件,则上传
           if (fileOk)
           {
               FileUpload1.PostedFile.SaveAs(path + FileUpload1.FileName);
               Response.Write("<script>alert(&#39;上传成功&#39;);</script>");
           }
Copier après la connexion

三、可以实现真正意义上的文件类型判断

try
            {
                //判断是否已经选取文件
                if (FileUpload1.HasFile)
                {
                    if (IsAllowedExtension(FileUpload1))
                    {
                        string path = Server.MapPath("~/images/");
                        FileUpload1.PostedFile.SaveAs(path + FileUpload1.FileName);
                        Response.Write("<script>alert(&#39;上传成功&#39;);</script>");
                    }
                    else
                    {
                        Response.Write("<script>alert(&#39;您只能上传jpg或者gif图片&#39;);</script>");
                    }
 
                }
                else
                {
                    Response.Write("<script>alert(&#39;你还没有选择文件&#39;);</script>");
                }
            }
            catch (Exception error)
            {
                Response.Write(error.ToString());
            }
            #endregion
        }
//真正判断文件类型的关键函数
        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;
            }
 
        }
Copier après la connexion


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!