【Flask】下载多个文件
2024-09-27 18:48:50
使用zipfile模块可以将多个文件打包成zip文件进行下载,但是常规的操作方式会在服务器磁盘上生成一个zip文件占用磁盘空间。
后引入BytesIO将文件写入到内存中然后下载:
def dl_plan(pid):
"""
下载测试计划关联的测试文件,分单个和多个文件情况(多个文件打包成zip下载)。
1. 计划只有一个文件则直接下载.xlsx文件
2. 计划有多个文件,则打包成zip通过BytesIO直接写入到内存中,不在本地生成.zip文件。
:param pid
:return:
""" dirpath = Config.FILE_UPLOAD_DIR
tp = TestPlan.objects.get_or_404(id=pid)
fp_test_files = tp.test_files
file_list = fp_test_files.split(",")
dl_name = '{}.zip'.format(tp.planname) if len(file_list) == 1:
return send_from_directory(dirpath, fp_test_files, as_attachment=True)
else:
memory_file = BytesIO()
with zipfile.ZipFile(memory_file, "w", zipfile.ZIP_DEFLATED) as zf:
for _file in file_list:
with open(os.path.join(dirpath, _file), 'rb') as fp:
zf.writestr(_file, fp.read())
memory_file.seek(0)
return send_file(memory_file, attachment_filename=dl_name, as_attachment=True)
最新文章
- UEditor百度富文本编辑器--让编辑器自适应宽度的解决方案
- Ajax工作流程
- Azure PowerShell (9) 使用PowerShell导出订阅下所有的Azure VM的Public IP和Private IP
- 首师大附中互测题:50229234海岛帝国:独立之战【C002】
- Sprint 2
- java中IO流相关知识点
- if转换switch的小技巧
- Linux set env export declare unset
- mount源码分析 【转】
- 微信网页获取openId
- jQuery日历和日期选取插件
- Folk博客程序——可以运行于node环境和asp环境的博客系统
- doctype(文档类型)的作用是什么?转载
- ant 具体命令行展示代码
- 背景图height:100%显示
- spacemacs及python学习-坑之记录
- Java并发编程面试题 Top 50 整理版
- python timeit模块简单用法
- 【算法】LeetCode算法题-Length Of Last Word
- iis url rewrite http->;https non-www->;www