我想让用户一次下载多个大文件的存档。但是,文件和存档可能太大而无法存储在我服务器的内存或磁盘上(它们是从其他服务器动态流入的)。我想在将存档流式传输给用户时生成存档。
我可以使用 Tar 或 Zip 或任何最简单的工具。我正在使用 django,它允许我在响应中返回生成器或类似文件的对象。这个对象可以用来插入这个过程。但是,我无法弄清楚如何围绕 zipfile 或 tarfile 库构建这类东西,而且我担心它们可能不支持在运行时读取文件,或者在构建存档时读取它。
这个答案在 converting an iterator to a file-like object 上可能有帮助。 tarfile#addfile
采用一个可迭代对象,但它似乎会立即将其传递给 shutil.copyfileobj
,因此这可能不像我希望的那样对生成器友好。
最佳答案
我最终使用了 SpiderOak ZipStream .
关于python - 创建和流式传输大型存档而不将其存储在内存或磁盘上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10405210/