3

我正在尝试识别上传文件的文件类型,搜索后,我打算使用 python-magic 来检查文件的 mime 类型。

FileField用于我的模型中,a用于ModelForm帮助保存文件。

上传所有文件后,我在 python shell 中检查 mime 类型

我发现使用

magic.from_file("path_to_the_file", mime=True)

将为已保存的图像、txt、pdf 文件提供预期的 mime 类型。

但是,对于所有 docx、ppt、excel 文件,它会将它们标识为'application/zip'

谁能解释为什么会发生这种情况(django自动将ms文件保存为zip??)。有没有什么好的方法可以让魔法识别 docx、ppt、excel 文件的原样?

非常感谢。

4

1 回答 1

4

我最近也遇到了这个问题。Python-magic 使用 Unix 命令,该命令file使用数据库文件来识别文档(请参阅 参考资料man file)。默认情况下,此数据库不包含有关如何识别 .docx、.pptx 和 .xlsx 文件类型的说明。

您可以file通过向 /etc/magic 添加指令来为命令提供其他信息以识别这些类型(请参阅https://serverfault.com/a/377792)。

这应该可以工作:

magic.from_file("path_to_the_file.docx", mime=True)

退货'application/vnd.openxmlformats-officedocument.wordprocessingml.document'

从 GitHub 上的 python-magic 使用说明中需要注意的一件事 - 这似乎不适用于 .docx、.pptx 和 .xlsx 文件类型(在 /etc/magic 中有附加信息):

magic.from_buffer(open("testdata/test.pdf").read(1024), mime=True)

退货'application/zip'

看来您需要提供更多数据才能正确识别这些文件类型:

magic.from_buffer(open("testdata/test.pdf").read(2000), mime=True)

退货'application/vnd.openxmlformats-officedocument.wordprocessingml.document'

我不确定所需的确切数量。

于 2016-04-13T12:26:15.833 回答