错误:客户端意图发送太大的身体

Ahs*_*san 6 django file-upload python-3.x server

我正在使用django-resto将我的媒体文件上传到远程服务器.但是,当我尝试上传时,它给了我django_resto.storage: Failed on create.

并在消息下面生成Log,

open() "/var/www/media/media/events/video/clipcanvas_14348_H264_640x360.mp4"
failed (2: No such file or directory),
    client: 172.17.42.1,
    server: ,
    request: "HEAD /media/events/video/clipcanvas.mp4 HTTP/1.1",
    host: "IP:8081"

client intended to send too large body:
    body: 2139606 bytes,
    client: *.*.*.*,
    server: ,
    request: "PUT /media/events/video/clipcanvas.mp4 HTTP/1.1",
    host: "IP:8081"
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么我会收到这样的错误吗?

媒体服务器的设置,

DEFAULT_FILE_STORAGE = 'django_resto.storage.DistributedStorage'
RESTO_MEDIA_HOSTS = ['IP:8081']
Run Code Online (Sandbox Code Playgroud)

Nginx配置,

server { 
    listen 192.168.0.10; 
    location / { 
        root /var/www/media; 
        dav_methods PUT DELETE; 
        create_full_put_path on; 
        dav_access user:rw group:r all:r; 
        allow 192.168.0.1/24; deny all;
    } 
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*our 19

此问题将由nginxs低默认client_max_body_size值(1MB)引起.

您需要client_max_body_size <value>在以下某个上下文块中设置更高的值:

  • HTTP
  • 地点
  • 服务器

代码将是这样的:

server {
    # set the max body size across the site to be 20mb
    client_max_body_size 20m;
}
Run Code Online (Sandbox Code Playgroud)

就个人而言,我会把它client_max_body_size放在一个location街区.这意味着您的新最大体型不会全局设置,而是设置为您网站的特定子位置.

server {
    # site default is 1mb
    client_max_body_size 1m;


    location /user/profiles/upload {
        # profile images should be no more than 2m
        client_max_body_size 5m;
        # the rest of your website will still use 1m max body size
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:请记住,在更改生效之前,您需要重新加载配置文件.

还要注意:你只client_max_body_size需要加上你需要的值加一点点.阻止人们发送大量巨大的文件以试图削弱您的服务器.