Search code examples
pythondjangofilesizefile-format

django limiting file size and file format in view


In my view I am getting a file like :

def add_view(request):
    if request.method == "POST":
        my_files = request.FILES.getlist("file")
        for file in my_files:
            Here if file is greater than 2 Mb raise error and send error message
            Also check if the file is of type jpg. If it is then return something 

How can I do this ? I want to do it by taking constant variable from settings. Like setting MEDIA_TYPE or MIME_FORMAT in settings and also file size in setting


Solution

  • You can use something like this:

    CONTENT_TYPES = ['image']
    MAX_UPLOAD_PHOTO_SIZE = "2621440"
    content = request.FILES.getlist("file")
    content_type = content.content_type.split('/')[0]
    if content_type in CONTENT_TYPES:
        if content._size > MAX_UPLOAD_PHOTO_SIZE:
            #raise size error
        if not content.name.endswith('.jpg'):
           #raise jot jpg error
    else:
        #raise content type error
    

    UPDATED

    If you want a form validation, try this:

    class FileUploadForm(forms.Form):
        file = forms.FileField()
    
        def clean_file(self):
            CONTENT_TYPES = ['image']
            MAX_UPLOAD_PHOTO_SIZE = "2621440"
            content = self.cleaned_data['file']
            content_type = content.content_type.split('/')[0]
            if content_type in CONTENT_TYPES:
                if content._size > MAX_UPLOAD_PHOTO_SIZE:
                    msg = 'Keep your file size under %s. actual size %s'\
                            % (filesizeformat(settings.MAX_UPLOAD_PHOTO_SIZE), filesizeformat(content._size))
                    raise forms.ValidationError(msg)
    
                if not content.name.endswith('.jpg'):
                    msg = 'Your file is not jpg'
                    raise forms.ValidationError(msg)
            else:
                raise forms.ValidationError('File not supported')
            return content