2016-05-26 4 views
0

Я использую питона магию, чтобы проверить файл перед загрузкой так за что я следую ниже ссылке:Validate файл перед загрузкой с помощью питона волшебной

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

validators.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') 

SO Я могу загрузить файл в формате PDF с этим питоном волшебной логикой, но я также хочу, т o разрешить загрузку файла изображения tiff и ограничить размер файла до 25 МБ.

Как я могу реализовать это с помощью магии питона?

ответ

3

Вам не нужна библиотека, чтобы сделать это - вы можете проверить размер закачиваемого файла в чистом методе на форме:

def clean_file(self): 
    file = self.cleaned_data['file'] 
    if file.size > 25000000: 
     raise ValidationError('The file is too big') 
    return file 
+0

Спасибо. Я также хочу разрешить файл tiff изображения, так что вы знаете, как его добавить? –

+0

Точно так же, как вы проверяете PDF-файл ... Вы знаете, как сделать этот бит уже. – Ben

+0

Я имею в виду, что я хочу разрешить только файл pdf и tiff при загрузке файла. –

Смежные вопросы