Skip to main content
 首页 » 编程设计

python之Daphne Django 文件上传大小限制

2025年01月19日37落叶

我将 Daphne 用于套接字和 http 连接。我正在运行 4 个工作容器,并且现在在一个 docker 容器中本地运行所有内容。

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

我的 docker 容器退出,错误代码为 137。我在 daphne 日志中没有收到任何错误。 daphne 容器刚刚死掉,但 worker 容器继续运行。

有谁知道是否有办法增加 daphne 的上传限制,或者我还缺少其他东西?

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

请您参考如下方法:

这是因为 daphne 在将控制权转移到带有 channel 的 django 之前立即完整地加载了整个 HTTP POST 请求主体。

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

这甚至发生在检查 django 中请求主体的大小之前。参见 here

有开票here 如果您想立即阻止它,请使用 uvicorn取而代之的是达芙妮。 Uvicorn 必须通过 block 将控制权传递给 Django。根据 FILE_UPLOAD_MAX_MEMORY_SIZE django 设置,您将在硬盘上(而不是在 RAM 中)收到一个临时文件。但是您需要编写自己的 AsyncHttpConsumer 或 AsgiHandler 因为 channel 中的 AsgiHandler 和 AsgiRequest 也不支持分块主体.这将在 PR 之后成为可能.