如何获取zip文件中文件的MIME类型而不将其提取并保存到服务器上?

问题描述

在ASP.NET Core 2.2应用程序中,我可以上传ZIP文件。 ZIP文件内容提取并保存在目录中。但是,在将文件保存到服务器上之前,我想检查它们的MIME类型(也就是内容类型),以确保它们都不是要存储的潜在危险文件,例如EXE。如果ZIP文件包含不需要的文件,我只想在页面显示模型错误

在将ZIP文件存储在目录中之后,我试图遍历zip文件中的文件以检查其MIME类型。使用此方法,虽然我可以看到带有扩展名的文件名,但看不到MIME类型。单独使用扩展名不是一个好主意,因为它可以被欺骗。

Directory.GetFiles(directory,"*.zip",SearchOption.TopDirectoryOnly).ToList()
    .ForEach(zipFilePath =>
    {
        using (FileStream zipToOpen = new FileStream(zipFilePath,FileMode.Open))
        {
            using (ZipArchive archive = new ZipArchive(zipToOpen,ZipArchiveMode.Read))
            {
                foreach (ZipArchiveEntry entry in archive.Entries)
                {
                    //entry does not contain MIME type,only filename with extension
                }
            }
        }
    });

另一种解决方案是将文件夹的权限设置为拒绝执行,但我不想这样做,因为这很容易忘记。

最后,有一种方法可以将文件存储在App_Data文件夹中,该文件夹不公开,因此无法直接执行其中的文件。问题是我找不到这样的文件夹。它似乎不是使用我的应用程序自动创建的。我认为这一定是ASP.NET和ASP.NET Core之间的区别。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)