我知道在将 zip/tar 归档文件发送到浏览器时可以“动态”构建它们;发送标题然后压缩每个文件并将这些部分流式传输到浏览器,这有助于在服务器内存有限时构建大型档案。
这可以通过 WSGI 实现吗?
至少在 Werkzeug,文档说
响应可以是任何类型的可迭代或字符串。如果它是一个字符串,它被认为是一个可迭代的,其中一个项目是传递的字符串。
因此,如果您可以构建一个生成器或某种其他类型的迭代器来以块的形式提供数据,它将被连接在一起并作为一个文件提供。(注意:您可能还希望direct_passthrough
通过 Werkzeug 将标志传递给 Response 对象。)
如果您不能使用 Werkzeug,您可能可以通过调查 Werkzeug 是如何使用它来开始的。
我在创建和流式传输大型存档而不将其存储在内存或磁盘中看到另一个类似的问题,提问者最后转向https://github.com/SpiderOak/ZipStream