Mihael Waschl
Mihael Waschl

Reputation: 350

How to upload file larger than 2.5MB to django?

I my goal is to upload file larger than 2.5MB to django server. I can upload file, if it is smaller than 2.5MB, if file is bigger then 2.5MB I get 413 Payload too large in browser. And I do not understand why.

I set MAX_UPLOAD_SIZE = 429916160 MEDIA_ROOT = os.path.join(BASE_DIR, 'files') MEDIA_URL = '/files/' and FILE_UPLOAD_MAX_MEMORY_SIZE = MAX_UPLOAD_SIZE in my settings.py. Currently I use django development server without apache or nginx.

My models.py:

def validate_file_extension(value):
    ext = os.path.splitext(value.name)[1]  # [0] returns path+filename
    valid_extensions = ['.vsdx']
    if not ext.lower() in valid_extensions:
        raise ValidationError(u'Unsupported file extension.')


class UpLoadFile(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    file = models.FileField(upload_to=path, validators=[validate_file_extension])
    uploaded_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.user.username + '/' + self.file.name
class UploadFileForm(forms.ModelForm):
    file = forms.FileField(required=True, label="")

    class Meta:
        model = UpLoadFile
        fields = ('file',)

views.py:

  if request.method == 'GET':
        upload_file_form = UploadFileForm()
        all_files = UpLoadFile.objects.select_related("user").filter(user__username=request.user).all().order_by("-uploaded_at")
        return render(request, 'interface/files.html', {'page_title': 'Datoteke',
                                                        'files': all_files,
                                                        'upload_file_form': upload_file_form})
    elif request.method == 'POST':
        if "upload-file" in request.POST:
            file_name = request.FILES.get("file")
            username = request.user
            if bool(os.path.exists(f'files/{username}/{file_name}')):
                messages.error(request, "Datoteka s tem imenom že obstaja!")
                return redirect('files')
            else:
                upload_file_form = UploadFileForm(request.POST, request.FILES)
                upload_file_form.instance.user = username
                if upload_file_form.is_valid():
                    upload_file_form.save()
                    messages.success(request, "Datoteka je uspešno dodana!")
                    return redirect('files')
                messages.error(request, "Te vrste datoteke ni mogoče naložiti na server. Preverite če ima datoteka .vsdx končnico.")
                return redirect('files')

Were and what should I set to be able to upload file larger than 2.5MB? I would appreciate any advice on how to handle this kind of file.

Upvotes: 0

Views: 1291

Answers (1)

DEEPAK KUMAR
DEEPAK KUMAR

Reputation: 362

Include this in your settings.py file

DATA_UPLOAD_MAX_MEMORY_SIZE = 50242880

Upvotes: 1

Related Questions