使用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)

最新文章

  1. UEditor百度富文本编辑器--让编辑器自适应宽度的解决方案
  2. Ajax工作流程
  3. Azure PowerShell (9) 使用PowerShell导出订阅下所有的Azure VM的Public IP和Private IP
  4. 首师大附中互测题:50229234海岛帝国:独立之战【C002】
  5. Sprint 2
  6. java中IO流相关知识点
  7. if转换switch的小技巧
  8. Linux set env export declare unset
  9. mount源码分析 【转】
  10. 微信网页获取openId
  11. jQuery日历和日期选取插件
  12. Folk博客程序——可以运行于node环境和asp环境的博客系统
  13. doctype(文档类型)的作用是什么?转载
  14. ant 具体命令行展示代码
  15. 背景图height:100%显示
  16. spacemacs及python学习-坑之记录
  17. Java并发编程面试题 Top 50 整理版
  18. python timeit模块简单用法
  19. 【算法】LeetCode算法题-Length Of Last Word
  20. iis url rewrite http->https non-www->www

热门文章

  1. ubuntu下USB连接Android手机
  2. 02-2设置第一启动项--进入Bios界面设置U盘为第一启动项
  3. bios文字解释
  4. centos7设置ip
  5. spring boot日志配置
  6. Centos7 install RabbitMQ
  7. 昂贵的聘礼 - poj 1062 (Dijkstra+枚举)
  8. 通过Lock对象以及Condition对象实现多线程同步
  9. JSP HTTP 状态码
  10. ios cocoapods获取不到最新库的原因主要有两个: