Fon*_*a16 2 python zip flask python-3.x
我的 Web 服务器上有一个文件夹结构,我想通过 Flask 将其用作压缩存档。
通过 Flask 提供文件非常简单,通过 Flask send_file:
return send_file(my_file,
attachment_filename=fileName,
as_attachment=True)
Run Code Online (Sandbox Code Playgroud)
压缩可以通过各种方式完成,例如使用shutil.make_archive或zipfile,但我无法弄清楚如何将整个目录压缩到内存中,然后在不将任何内容保存到磁盘的情况下将其发送。shutil.make_archive似乎只能在磁盘上创建档案。zipfile在 Internet上找到的示例主要是关于服务单个文件的。
我如何将它结合在一起而不必将所有内容保存到磁盘?最好使用BytesIO.
import time
from io import BytesIO
import zipfile
import os
from flask import send_file
@app.route('/zipped_data')
def zipped_data():
timestr = time.strftime("%Y%m%d-%H%M%S")
fileName = "my_data_dump_{}.zip".format(timestr)
memory_file = BytesIO()
file_path = '/home/data/'
with zipfile.ZipFile(memory_file, 'w', zipfile.ZIP_DEFLATED) as zipf:
for root, dirs, files in os.walk(file_path):
for file in files:
zipf.write(os.path.join(root, file))
memory_file.seek(0)
return send_file(memory_file,
attachment_filename=fileName,
as_attachment=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1056 次 |
| 最近记录: |