【问题标题】:How to check if a document is a valid PDF document如何检查文档是否为有效的 PDF 文档
【发布时间】:2015-04-24 14:45:22
【问题描述】:

我正在创建一个应用程序,其中用户在服务器上上传不同类型的文档。我正在验证不同类型的文档,例如 jpeg、jpg、PNG、TIF、TIFF、GIF、BMP、ICO。

 Dictionary<string, byte[]> imageHeader = new Dictionary<string, byte[]>();
    imageHeader.Add("JPG", new byte[] { 0xFF, 0xD8, 0xFF, 0xE0 });
    imageHeader.Add("JPEG", new byte[] { 0xFF, 0xD8, 0xFF, 0xE0 });
    imageHeader.Add("PNG", new byte[] { 0x89, 0x50, 0x4E, 0x47 });
    imageHeader.Add("TIF", new byte[] { 0x49, 0x49, 0x2A, 0x00 });
    imageHeader.Add("TIFF", new byte[] { 0x49, 0x49, 0x2A, 0x00 });
    imageHeader.Add("GIF", new byte[] { 0x47, 0x49, 0x46, 0x38 });
    imageHeader.Add("BMP", new byte[] { 0x42, 0x4D });
    imageHeader.Add("ICO", new byte[] { 0x00, 0x00, 0x01, 0x00 });

我也想为 pdf、docx、excel、PPT 做同样的事情。请帮我找到这些文件的十六进制代码。

如果有人尝试上传无效文档,我还想验证损坏的文档。

【问题讨论】:

  • 验证 docx 会相当复杂,因为主要的二进制格式只是一个 ZIP 存档,但内容是特定的。所以你真的想验证它实际上是 docx,或者“可能是 docx”,意思是一个 ZIP 存档,可能是 xlsx,或者只是一个随机的文件集合?此外,一个有效的 PDF 文档需要实际解析整个文件,但检查开头可能表明它可能是一个。
  • 我只想验证上述文件

标签: c# asp.net file-upload upload


【解决方案1】:

libmagic 是这类东西的库。它在现代 Unix 系统中的 file 命令后面。您可以通过 FFI/bindings 使用它,也可以查看他们的 magic number database

【讨论】:

    猜你喜欢
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多