c# - ICSharpCode.SharpZipLib 验证 zip 文件

标签 c# asp.net asp.net-mvc sharpziplib icsharpcode

使用 C# 的 ICSharpCode.SharpZipLib,我如何验证传递的文件实际上是一个有效的 zip 文件(不是右键单击并重命名为 .zip 的文件)?

[HttpPost]
        public ActionResult Upload(HttpPostedFileBase fileData)
        {
                if (fileData != null && fileData.ContentLength > 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 });

    }

最佳答案

您可以使用 ZipFile.TestArchive 方法。以下是它在 SharpZipLib 中的声明方式:

/// <summary>
/// Test an archive for integrity/validity
/// </summary>
/// <param name="testData">Perform low level data Crc check</param>
/// <returns>true if all tests pass, false otherwise</returns>
/// <remarks>Testing will terminate on the first error found.</remarks>
public bool TestArchive(bool testData)
{
    return TestArchive(testData, TestStrategy.FindFirstError, null);
}

使用示例:

ZipFile zipFile = new ZipFile("archive.zip");
Console.WriteLine("Archive validation result: {0}", zipFile.TestArchive(true));

关于c# - ICSharpCode.SharpZipLib 验证 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9539730/

相关文章:

c# - 如何通过 WebSocket4Net 库使用代理

c# - 对于每天可能向订阅者发送 10k+ 封电子邮件的 .Net 程序,您可以分享哪些陷阱/技巧/提示?

c# - 如何检查防火墙规则是否存在

javascript - 缩小 signalr/hubs 文件

c# - 如何从 Controller 调用 Web 服务?

c# - 传递异步操作时的意外行为

asp.net - Membership.GetAllUsers() 无法连接到数据库 ASP.Net Identity MVC 5

c# - 为什么 Request.Content.ReadAsAsync 不区分大小写?

c# - 如何将联接表传递给 MVC 中的 View ?

javascript - MVC 动态 javascript 与操作调用