Daphne Django文件上传大小限制

时间:2017-10-28 04:21:19

标签: python django docker daphne

我正在使用Daphne进行套接字和http连接。我正在运行4个工作容器并在Docker容器中本地运行所有内容。

如果我尝试上传400MB的文件,我的daphne服务器将失败。它适用于高达15MB的小文件。

我的docker容器退出时出现错误代码137.我在daphne日志中没有出现任何错误。达芙妮集装箱刚刚死亡,但工人集装箱继续运转。

有没有人知道是否有办法增加达芙妮的上传限制,或者我错过了其他内容?

我启动了daphne服务器 daphne -b 0.0.0.0 -p 8001 project.asgi:channel_layer --access-log=${LOGS}/daphne.access.log

1 个答案:

答案 0 :(得分:1)

这是因为daphne会立即将整个HTTP POST请求主体完全加载,然后立即将控制权通过通道转移到Django。

您所有的400 MB都已加载到RAM here中。您的Docker容器由于out of memory原因而死亡。

甚至在检查django中请求正文的大小之前就会发生这种情况。参见here

有一张公开票here 如果您想立即阻止它,请使用uvicorn而不是daphne。 Uvicorn必须通过块将控制权传递给Django。并且,根据FILE_UPLOAD_MAX_MEMORY_SIZE django设置,您将在硬盘上(而不是RAM中)收到一个临时文件。但是您需要编写自己的AsyncHttpConsumerAsgiHandler,因为通道中的AsgiHandlerAsgiRequest也不支持分块正文。 PR之后,这将成为可能。