我正在尝试在目录中动态创建一个 zip 文件,并通过 Flask 应用程序将其返回给用户。下面的内容非常适合较小的目录,但我也想通过充满图像的大型目录(> 20GB)来实现这一点。
def return_zip():
dir_to_send = '/dir/to/the/files'
base_path = pathlib.Path(dir_to_send)
data = io.BytesIO()
with zipfile.ZipFile(data, mode='w') as z:
for f_name in base_path.iterdir():
z.write(f_name, arcname=f_name.name)
data.seek(0)
return send_file(data, mimetype='application/zip', as_attachment=True, attachment_filename='data.zip')
在大型目录上尝试此操作时,整个系统崩溃,是否有任何方法可以在流中创建超出系统内存的 zip?
我不想将 ZIP 写入磁盘,然后将其发送给用户,然后从磁盘中删除它,因为这只会增加 R/W 操作,从而磨损所有内容所在的存储驱动器。
操作系统在 SSD 上运行(与要压缩的图像不是同一驱动器),也许其中一部分可以变成虚拟 RAM?我不太擅长记忆。
任何想法将不胜感激!
Ubuntu 20.04、带 Flask 的 Python3、2TB 存储驱动器和带有 8GB RAM 的 250GB 操作系统 SSD。
但是,
有两个现代的、维护的 Python 3 库,用于生成内存使用量较低的实时流 ZIP 数据。