title: ICSharpCode.SharpZipLib validate zip file
body: <p>Using ICSharpCode.SharpZipLib for C#, how can I validate that the file being passed is actually a valid zip file (not something that has been right clicked and renamed as .zip)?</p>
  
  <pre><code>[HttpPost]
          public ActionResult Upload(HttpPostedFileBase fileData)
          {
                  if (fileData != null &amp;&amp; fileData.ContentLength &gt; 0)
                  {
                      if (Path.GetExtension(fileData.FileName) == ".zip")
                      {
                          var zipFile = Server.MapPath("~/Content/uploads/" + Path.GetFileName(fileData.FileName));
                          fileData.SaveAs(zipFile);
  
                          FileStream fs = System.IO.File.OpenRead(zipFile);
                          ZipFile zf = new ZipFile(fs);
  
                          foreach (ZipEntry zipEntry in zf)
                          {
                              if (zipEntry.Name.EndsWith(".htm") || zipEntry.Name.EndsWith(".html"))
                              {
                                   return Json(new { success = true });                             
                              }
                          }
                          fs.Close();
                          fs.Dispose();
                          System.IO.File.Delete(zipFile);
                      }
                      else
                      {
                          var fileName = Server.MapPath("~/Content/uploads/" + Path.GetFileName(fileData.FileName));
                          fileData.SaveAs(fileName);                           
                          return Json(new { success = true });
                      }
                  }                    
                  return Json(new { success = false });
  
      }
  </code></pre>