带有python-magic(libmagic)的Django来验证上传的文件

时间:2019-04-23 21:42:51

标签: python django python-magic libmagic

我正在尝试在django中保存上载文件的mime类型。我不需要拒绝某些类型的文件,我只需要跟踪上传文件的mime类型。我正在这样做:

class Foo(models.Model):
    document = models.FileField(upload_to="foo", null=False)
    file_type = models.CharField(max_length=14)

    def save(self, *args, **kwargs):
        print(self.document.read()) #confirms that the file exists, and this prints a load of bytes, so it's a bytes  object
        filetype = magic.from_file(self.document.read())
        self.file_type = filetype
        return super().save(*args, **kwargs)

问题是filetype = magic.from_file(self.document.read())引发错误:“ ValueError:嵌入的空字节”。该文件绝对没有损坏(在这种情况下,它是一个png,因此我希望使用image / png)。 from_file似乎确实想要一个字节对象,而self.document.read()肯定会生成字节,所以我不确定是什么问题...

1 个答案:

答案 0 :(得分:1)

从文档中:

>>> import magic
>>> magic.from_file("testdata/test.pdf")
'PDF document, version 1.2'
>>> magic.from_buffer(open("testdata/test.pdf").read(1024))
'PDF document, version 1.2'
>>> magic.from_file("testdata/test.pdf", mime=True)
'application/pdf'

from_file具有文件名,或者您可以使用from_buffer。更多详细信息python-magic