【问题标题】:Distinguishing between *.zip file and zipped container files区分 *.zip 文件和压缩容器文件
【发布时间】:2021-05-11 07:58:03
【问题描述】:

我有一个作为文件内容的数据 InputStream,但没有附加任何文件信息。我希望能够区分数据表示 *.zip 文件的情况,以及它是在封面下使用 zip 的容器文件格式(例如 *.docx、*.odt、*.jar)的情况。我不一定需要知道容器格式是什么,只需要知道流是否是“普通”zip(所以我知道将流拆分为单独的文件是否合适)。

这可能吗?我很乐意在解压之后或之前进行检测。

理想情况下,我尝试在 Java 中执行此操作,但如果有其他语言的代码示例,那么我很乐意在必要时将它们移植过来。

【问题讨论】:

    标签: java zip file-format


    【解决方案1】:

    没有绝对可靠和正确的方法可以做到这一点,因为那些使用 ZIP 格式作为容器的格式往往是 100% 有效且正确的 ZIP 文件。

    所以它们是 ZIP 文件。

    但是,由于这些格式的数量不是无限的(而且在现实世界中只有一小部分是常见的),因此您可能只需专门检测这些格式并处理您没有处理的所有内容即可识别为“真实”的 ZIP 文件。

    这些格式中的大多数都需要在文件的早期字节中使用某种易于检查的标识符,因此如果您可以编写特定于规范的代码,那么它应该很容易。

    file 可以正确检测大多数这些格式,因此查看其来源应该会给您足够的指示。

    一些例子:

    Apache Tika 也很可能(尚未检查)已经完成了所有检测。

    【讨论】:

    • 谢谢 - 您对 file 的评论将我带到了 SimpleMagic 库 (github.com/j256/simplemagic),它似乎能够区分 zip 和流中的其他文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    相关资源
    最近更新 更多