gpt4 book ai didi

django - NGinx 和 Django,提供大文件 (3gb+)

转载 作者:行者123 更新时间:2023-12-01 03:38:45 25 4
gpt4 key购买 nike

我在处理大文件下载/上传 (3gb+) 时遇到了一些问题。

当我使用 Django 时,我想提供文件的问题可能来自 Django 或 NGinx。

在我启用 NGinx 的站点中,我有

server {
...
client_max_body_size 4G;
...
}

在 django 中,我以块大小提供文件:
def return_file(path):
filename = os.path.basename(path)
chunk_size = 8192
response = StreamingHttpResponse(FileWrapper(open(path), chunk_size), content_type=mimetypes.guess_type(path)[0])
response['Content-Length'] = os.path.getsize(path)
response['Content-Disposition'] = 'attachment; filename={0}'.format(filename)
return response

这种方法允许我从 600Mb~ 的下载传递到 2.6Gb,但似乎下载在 2.6Gb 处被截断了。我跟踪了错误:
2015/09/04 11:31:30 [error] 831#0: *553 upstream prematurely closed connection while reading upstream, client: 127.0.0.1, server: localhost, request: "GET /chat/download/photorec.zip/ HTTP/1.1", upstream: "http://unix:/web/rsmweb/run/gunicorn.sock:/chat/download/photorec.zip/", host: "localhost", referrer: "http://localhost/chat/2/" 

在阅读了一些帖子后,我将以下内容添加到了我的 NGinx 配置中:
   proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;

但是我遇到了同样的错误 *1而不是 *553*
我还以为可能是django数据库超时,于是补充道:
DATABASE_OPTIONS = {
'connect_timeout': 14400,
}

但它也不起作用。 (通过开发服务器下载大约需要 30 秒)

PS:有人已经指出问题出在 Django 上,但我一直无法弄清楚原因。 Django 没有打印或登录任何错误!

谢谢你的帮助!

最佳答案

不要使用 django 来传递静态内容,特别是当它是像这样大的静态内容时。 Nginx 是交付它们的理想选择。你需要做的就是在你的 nginx 配置文件中创建一个这样的映射:

location /static/ {
try_files $uri =404 ;
root /var/www/myapp/;
gzip on;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

}

/var/www/myapp/作为 django 应用程序的顶级文件夹。在里面你会有一个名为 static/ 的文件夹。您需要使用 django manage.py 的 collectstatic 命令将所有静态文件收集到其中。

当然,您可以随意重命名这些文件夹,并一起使用不同的文件结构。有关如何为静态内容配置 nginx 的更多信息,请访问此链接: http://nginx.org/en/docs/beginners_guide.html#static

关于django - NGinx 和 Django,提供大文件 (3gb+),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32411349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com