9

My team has been getting 413 errors whenever we try and upload large files to our Django back-end: 413 Payload too large

We can't exactly pin down the maximum acceptable file size - it seems to vacillate in the 1-3MB range.

Things we have excluded:

  • It's not a webserver configuration issue, because we're running the
    Django server locally (without a webserver)

  • We believe it's not an app server configuration issue, because this happens on multiple app servers (./manage.py runserver and daphne -p 8000 topknott.asgi:application)

  • It's not an issue with the field on the Django model, which looks normal: photo = models.ImageField(blank=True)

Can anyone spot what we're missing?

NattyP
  • 105
  • 1
  • 5

3 Answers3

9

Django has a build in mechanism to prevent any suspicious activity.

In your settings.py file set the variable

DATA_UPLOAD_MAX_MEMORY_SIZE = 10*1024*1024  # your size limit in bytes

See documentation: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-DATA_UPLOAD_MAX_MEMORY_SIZE

Martin Janeček
  • 420
  • 3
  • 15
4

If your team was/is using Django Channels, there was a piece of code introduced in 2.1.7 causing an unintended 413 error (discussed here). This was fixed in 2.3.0, however.

Dabble
  • 139
  • 1
  • 3
  • 12
0

As far as I know runserver or daphne will never return a 413. Looks like you have NGINX in front of the python server.

You can change the limit with client_max_body_size in the server block in nginx.conf

    server {
        client_max_body_size 20M;
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass         http://127.0.0.1:8000/;
        }
    }
  • 4
    I'm running the Django server locally on my machine. That means there's no webserver (no NGINX) in front of the Python server – NattyP Mar 15 '19 at 21:49