【发布时间】:2018-01-29 20:45:50
【问题描述】:
我们正在开发需要能够上传 10+ gb 文件的软件。
我的退路只是简单地将数据分块并向 django 发出重复的 POST 请求,但是我想知道 Django 和 WSGI 是否可以处理单个 http 请求的“传输编码:分块”?
【问题讨论】:
我们正在开发需要能够上传 10+ gb 文件的软件。
我的退路只是简单地将数据分块并向 django 发出重复的 POST 请求,但是我想知道 Django 和 WSGI 是否可以处理单个 http 请求的“传输编码:分块”?
【问题讨论】:
从技术上讲,WSGI 规范不允许分块的请求内容。然而,一些 WSGI 服务器支持一个非官方的扩展来指示正在提供具有未指定/可变长度的请求内容。这可用于处理分块请求内容,尽管您可能还需要配置 WSGI 服务器以允许分块请求。
但问题是不确定 Django 是否支持这个非官方扩展。
你应该研究的是 WSGI 的非官方 wsgi.input_terminated 扩展以及是否有任何 Django 插件支持它。然后确定您使用的 WSGI 服务器是否支持该扩展。更多最新版本的 mod_wsgi 和 uWSGI 支持它。我不确定 gunicorn。
【讨论】:
通常,Django 文档说明的方式就足够了:
with open('some/file/name.txt', 'wb+') as destination:
for chunk in request.FILES['file'].chunks():
destination.write(chunk)
如果不行,你可以试试django-chunked-upload。
【讨论】: