Django python-magic识别ppt,docx,word上传文件为'application / zip'

时间:2013-07-22 03:37:46

标签: django filefield

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

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

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

我发现使用

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

woud为已保存的image,txt,pdf文件提供预期的mime类型。

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

任何人都可以解释为什么会发生这种情况(django自动将ms文件保存为zip ??)。有没有什么好方法可以让魔术识别docx,ppt,excel文件呢?

非常感谢。

1 个答案:

答案 0 :(得分:2)

我最近也遇到过这个问题。 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'

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