我正在尝试识别上传文件的文件类型,搜索后,我打算使用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文件呢?
非常感谢。
答案 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'
我不确定所需的确切数量。