如何在不使用扩展程序的情况下可靠地验证上传文件的类型?我猜你必须检查标题/读取一些字节,但我真的不知道如何去做。我正在使用c#和asp.net。

感谢您的任何建议。


好的,所以从上面的链接我现在知道我正在寻找'ff d8 ff e0'来肯定地识别一个.jpg文件。

在我的代码中我可以读出前20个字节没问题:

                FileStream fs = File.Open(filePath, FileMode.Open);
                Byte[] b = new byte[20];
                fs.Read(b, 0, 20);

所以(请原谅我在这里完全缺乏经验),但如何检查字节数组是否包含'ff d8 ff e0'?

有帮助吗?

解决方案

以下是对您发布的后续问题的快速反应:

byte[] jpg = new byte[] { 0xFF, 0xD8, 0xFF, 0xE0 };
bool match = true;
for (int i = 0; i < jpg.Length; i++)
{
    if (jpg[i] != b[i])
    {
        match = false;
        break;
    }
}

其他提示

这确实是Unix file 程序的功能,可靠性或多或少。在某种程度上,它取决于您尝试检测其文件的程序是否发出文件头;程序 tar 因不这样做而臭名昭着。这取决于您计划尝试和识别的文件类型,但使用 file 的实现可能最简单;它可识别多种文件类型,现代版本可通过可处理多种方案的额外文件类型定义文件进行扩展。

文件的前几个字节通常会告诉您文件类型。例如,请参阅
http://www.garykessler.net/library/file_sigs.html
http://www.astro.keele.ac.uk/ oldusers / rno / Computing / File_magic.html

使用System.IO在上传后将二进制读取为二进制文件。

我很好奇,为什么你不能依赖于ContentType标题?

Wotsit 是查找各种文件类型的幻数的好资源。

阅读文件内容是一种万无一失的方法。由于您在.Net中构建它,您可能可以检查上传文件的MIME类型。

您可以通过DllImport urlmon.dll来提供帮助。请参考以下帖子: http://coding-passion.blogspot.com/2008/ 11 /验证文件-type.html

为了澄清Content-type,它总是由文件的扩展驱动。因此,即使.zip文件将其扩展名重命名为.txt,内容类型仍将仅显示文本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top