• flask BytesIO() 多个文件打包下载 zipfile


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

    大体的代码就是这些

  • 相关阅读:
    二叉树的存储结构
    面试Java需要的知识总结
    EJB总结
    WEB 容器、WEB服务和应用服务器的区别与联系
    Linux安装JBOSS
    JBOSS和WebLogic区别
    深入浅出JMS(一)--JMS基本概念
    Java缓冲流细节
    xor和路径(codevs 2412)
    外星千足虫(bzoj 1923)
  • 原文地址:https://www.cnblogs.com/onemorepoint/p/9356191.html
Copyright © 2020-2023  润新知