zoukankan      html  css  js  c++  java
  • 【Flask】下载多个文件

    使用zipfile模块可以将多个文件打包成zip文件进行下载,但是常规的操作方式会在服务器磁盘上生成一个zip文件占用磁盘空间。

    后引入BytesIO将文件写入到内存中然后下载:

     1 def dl_plan(pid):
     2     """
     3     下载测试计划关联的测试文件,分单个和多个文件情况(多个文件打包成zip下载)。
     4     1. 计划只有一个文件则直接下载.xlsx文件
     5     2. 计划有多个文件,则打包成zip通过BytesIO直接写入到内存中,不在本地生成.zip文件。
     6     :param pid
     7     :return:
     8     """
     9 
    10     dirpath = Config.FILE_UPLOAD_DIR
    11     tp = TestPlan.objects.get_or_404(id=pid)
    12     fp_test_files = tp.test_files
    13     file_list = fp_test_files.split(",")
    14     dl_name = '{}.zip'.format(tp.planname)
    15 
    16     if len(file_list) == 1:
    17         return send_from_directory(dirpath, fp_test_files, as_attachment=True)
    18     else:
    19         memory_file = BytesIO()
    20         with zipfile.ZipFile(memory_file, "w", zipfile.ZIP_DEFLATED) as zf:
    21             for _file in file_list:
    22                 with open(os.path.join(dirpath, _file), 'rb') as fp:
    23                     zf.writestr(_file, fp.read())
    24         memory_file.seek(0)
    25         return send_file(memory_file, attachment_filename=dl_name, as_attachment=True)
  • 相关阅读:
    webpack2.x抽取css
    window.print控制打印样式
    Vue2.x中的父子组件相互通信
    Vue2.x中的父组件数据传递至子组件
    NodeJs之fs的读写删移监
    设计
    mycat服务启动{管理模块启动过程}
    mycat初探
    zookeeper总结
    rocketmq总结
  • 原文地址:https://www.cnblogs.com/chen0427/p/8487612.html
Copyright © 2011-2022 走看看