0

我正在使用 python 魔法在上传之前验证文件,因此我遵循以下链接:

https://djangosnippets.org/snippets/3039/

验证器.py 文件:

from django.core.exceptions import ValidationError
import magic


class MimetypeValidator(object):
    def __init__(self, mimetypes):
        self.mimetypes = mimetypes

    def __call__(self, value):
        try:
            mime_byt = magic.from_buffer(value.read(1024), mime=True)
            mime = mime_byt.decode(encoding='UTF-8')
            if mime not in self.mimetypes:
                raise ValidationError('%s is not an acceptable file type' % value)
        except AttributeError as e:
            raise ValidationError('This value could not be validated for file type' % value)

这是我的 form.py 文件:

class FileForm(forms.ModelForm):
    file = forms.FileField(
        label='Select a File *',
        allow_empty_file=False,
        validators=[MimetypeValidator('application/pdf')],
        help_text='Max. Size - 25 MB')

    class Meta:
        model = File
        fields = ('file')

所以我可以用这个 python 魔术逻辑上传一个 pdf 文件,但我也想允许上传一个图像 tiff 文件并将文件大小限制为 25 MB。

如何通过使用 python 魔术来实现这一点?

4

1 回答 1

2

您不需要任何库来执行此操作 - 您可以在表单上的 clean 方法中检查文件的上传大小:

def clean_file(self):
    file = self.cleaned_data['file']
    if file.size > 25000000:
        raise ValidationError('The file is too big')
    return file
于 2016-05-26T07:38:13.767 回答