【发布时间】:2018-01-10 13:15:50
【问题描述】:
我有一个用例,我需要知道文件的文件类型以识别可执行文件(exe、安装程序等)、存档文件(zip、rar 等)并将其列入黑名单。因此依赖扩展名对我来说是不够的,因为文件的扩展名可以更改,但文件属性将保持不变。我尝试使用 linux 命令:
file --b filename
上述解决方案适用于除 .xlsx 和 .docx 文件之外的所有文件类型,因为该命令为 .xlsx 和 .docx 提供以下内容
压缩存档数据,至少 v2.0 才能提取
因此,我最终也将 .xlsx 和 .docx 文件列入了黑名单。
任何人都可以建议我一种方法来获取文件类型,而无需使用适用于 xlsx 和 docx 的扩展名。
【问题讨论】:
-
xlsx文件和zip文件具有完全相同的文件结构!!! 唯一的区别是扩展名!不相信我? - 重命名文件,然后打开它。所以不,除了查看扩展名之外,没有办法区分这些特定的“文件类型”。 -
无论如何,您在这里看到的概念是读取文件的 MIME-TYPE。有various libraries 这样做;您不需要进行外部系统调用。
-
@TomLord 所说的。这些文件遵循Office Open XML。 “[OOXML] 是由 Microsoft 开发的一种压缩的、基于 XML 的文件格式,用于表示电子表格、图表、演示文稿和文字处理文档。” 这种格式已经过标准化,允许读写这些文件Microsoft 以外的文档类型。在此标准之前,Microsoft 使用诸如
xls和doc之类的专有二进制格式,这使得与非 Microsoft 用户共享文件变得更加困难。 -
可以找到合适的MIME类型Here
标签: ruby-on-rails ruby linux file