是否可以验证发布的文件是否为pdf?

Rat*_*tna 3 c# pdf asp.net

保守的网站主要工作是接受用户的文件并保存.一切都很好,直到2个月后,当我被告知强制约束只接受pdf文件.

在此之前,用户习惯于从文本,rtf到良好的pdf提交各种格式.

我通过检查文件扩展名来应用约束 - 简单吗?但是当管理员检查这些文件时,有60%的文件损坏了.

我花了很多不眠之夜来确定腐败的原因然后我突然想到他们可能正在提交腐败文件.

我采用了以前的记录,并确定了一些用户的文件类型最喜欢的格式,我们收到了损坏的文件.

我把扩展改回了那里最喜欢的扩展和繁荣......文件打开了.

然而我所知道的是粗略地告诉用户如何将文件转发到pdf一些(很多)只是改变了扩展和提交.由于网站奖励用户没有.文件提交管理人员对我嗤之以鼻.有什么办法可以在不依赖扩展的情况下检查文件是否为pdf?

我在c#3.5 asp.net中使用fileupload

spe*_*der 13

由于所有PDF文件都以ASCII字符串"%PDF-"开头,因此只需测试文件的前几个字节,以确保它们以此字符串开头.

bool IsPdf(string path)
{
    var pdfString = "%PDF-";
    var pdfBytes = Encoding.ASCII.GetBytes(pdfString);
    var len = pdfBytes.Length;
    var buf = new byte[len];
    var remaining = len;
    var pos = 0;
    using(var f = File.OpenRead(path))
    {
        while(remaining > 0)
        {
            var amtRead = f.Read(buf, pos, remaining);
            if(amtRead == 0) return false;
            remaining -= amtRead;
            pos += amtRead;
        }
    }
    return pdfBytes.SequenceEqual(buf);
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我发现此站点在帮助确定文件是否与其扩展名匹配方面非常有用。您可以在支出者的代码中使用大量文件签名。