Django с python-magic (libmagic) для проверки загруженных файлов - PullRequest
1 голос
/ 24 апреля 2019

Я пытаюсь сохранить тип mime загруженного файла в django.Мне не нужно отклонять определенные типы файлов, мне просто нужно отслеживать 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 Ответ

1 голос
/ 24 апреля 2019

Из документации:

>>> 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.Подробнее питон-магия .

...