需求描述

Flask开发的系统后台需要将一些程序中生成的文本数据和二进制的内存对象打包成zip文件提供给客户端从浏览器直接下载,刚开始的思路是先分别将文本和二进制的数据写到磁盘上,打包后再当成临时文件进行删除,但是感觉这样好像有点啰嗦,而且效率会比较低,研究了一下其实可以直接在内存中完成这些操作并直接扔给Flask的send_file发给客户端浏览器.

实现过程

import io
import zipfile# 模拟数据
txt1 = 'Hello'
txt2 = 'World'
bin1 = b'xxxxx'
bin2 = b'yyyyy'def pack_up():_io = io.BytesIO() # 创建zip文件在内存中对应的二进制IO对象zf = zipfile.ZipFile(_io, 'w', zipfile.ZIP_DEFLATED)  # 将上面的IO对象作为参数初始化ZipFile对象, 'w'表示写入, 第三个参数为压缩算法# 下面是用writestr()方法添加文件,注意无论是文本内容还是二进制内容都要用这个方法zf.writestr('txt1.txt', txt1)  # 将txt1内容添加到压缩包里面的txt1.txt文件zf.writestr('txt2.txt', txt2) # 将txt2内容添加到压缩包里面的txt2.txt文件zf.writestr('bin1.bin', bin1) # 将bin1内容添加到压缩包里面的bin1.bin文件zf.writestr('bin2.bin', bin2) # 将bin2内容添加到压缩包里面的bin2.bin文件# zf.filelist   # 可以查看当前创建的ZipFile对象中已经添加好4个文件的信息zf.close() # 注意添加完文件后记得要关闭, 否则后面无论是向磁盘写文件或者直接扔给Flask发送都会出错# 如果需要将当前创建好的zip文件写入磁盘的话进行下面操作:with open('d:\\xxx.zip', 'wb') as f:f.write(_io.getbuffer())# 如果需要扔给Flask的话, 可以在路由的函数中用下面方法手工创建Response返回给客户端(这里省略了引入,只做思路提示):resp = make_response(_io.getvalue())resp.headers['Content-Disposition'] = 'attachement; filename=export.zip'resp.headers['Content-Type'] = 'application/zip'return resp

使用zipfile/BytetesIO实现在内存中创建zip压缩文件相关推荐

  1. php 建立zip压缩文件,如何使用PHP创建zip压缩文件

    使用压缩文件可以节省磁盘空间:压缩文件较小,便于网络传输php 压缩文件,效率高. 本文向您介绍了如何使用PHP创建zip压缩文件,希望对大家有所帮助. PHP中有一个ZipArchive类php 压 ...

  2. java 生成zip如法打开_Java创建ZIP压缩文件的方法

    本文实例讲述了Java创建ZIP压缩文件的方法.分享给大家供大家参考.具体如下: 这里注意:建议使用org.apache.tools.zip.*包下相关类,否则可能会出现中文乱码问题. /** * 压 ...

  3. android下载zip到assets,Android将assets中的zip压缩文件解压到SD卡

    程序首先要获取写外部存储权限: 程序: package com.hu.andstar; import java.io.File; import java.io.FileOutputStream; im ...

  4. php创建压缩文件 保存路径,通过php生成zip压缩文件,支持文件和压缩包路径查找...

    /* * new creatZip($_dir,$_zipName); *@ _dir是被压缩的文件夹名称,可使用路径,例 'a'或者'a/test.txt'或者'test.txt' *@ _zipN ...

  5. 在内存中创建临时表和表变量

    在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...

  6. python生成epub文件_python在内存中生成Zip文件!

    import zipfile import StringIO class MemoryZipFile(object): def __init__(self): #创建内存文件 self._memory ...

  7. python在内存中生成Zip文件!

    python在内存中生成Zip文件! - 天真的好蓝啊 - 博客园 python在内存中生成Zip文件! import zipfile import StringIO class MemoryZipF ...

  8. PYTHON如何在内存中生成ZIP文件

    如题,代码如下: class MemoryZipFile(object):def __init__(self):#创建内存文件self._memory_zip= StringIO.StringIO() ...

  9. 【Java-IO】File、搜索删除剪切、字符集、字符编码、字节流、将内存中的数据写入文件、字符流、缓冲流、Scanner、格式化输出、数据流、对象流、序列化与反序列化、Files工具类

    IO 文章目录 IO 简介 File 分隔符.大小写 常用方法 练习:搜索.删除.剪切 字符集(Character Set) 字符编码(Character Encoding) 字符编码比较 乱码 字节 ...

最新文章

  1. matlab中的timer模块,[转载]Matlab中Timer的使用
  2. centos配置-java-php-mysql【转载参考】
  3. HTML5---19.地理定位的接口使用
  4. 如何实现一个HTML5 RPG游戏引擎——第一章,实现地图类
  5. matlab正弦序列频谱,【求助】正弦信号序列fft频谱分析!!!
  6. Docker 调试技巧
  7. python代码调试快捷键_6. Pycharm的传参、快捷键、执行代码、调试模式
  8. B16_NumPy线性代数(dot,vdot,inner,matmul,determinant,solve,inv)
  9. 自己写的DBUtil数据库连接工具类
  10. canal原理的一些学习-1(canal的一些原理性介绍)
  11. 安卓最新系统_成纺移动校园(移动办公系统)V3.2.1 安卓最新版
  12. Python攻克之路-高阶函数
  13. 大数据入门(一)-大数据概念和特点(1)
  14. 深度学习笔记(24) 卷积层
  15. DFS-分布式文件系统对比
  16. Leetcode刷题记录[java]——717 1-bit and 2-bit Characters
  17. java中Executor、ExecutorService、ThreadPoolExecutor介绍(转)
  18. blob协议的加密视频地址下载,多个ts文件合并方法,亲测有效
  19. 安装Mediapipe中遇到的问题ERROR: An error occurred during the fetch of repository ‘local_execution_config_pyt
  20. iOS定位添加大头针

热门文章

  1. 封装一个简陋的promise
  2. 2012年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题——解析版
  3. html页面居中怎么设置,实现div标签在html页面中居中的几种方式
  4. 19条设计规范你知多少?- 第407篇
  5. php hash碰撞攻击与防御
  6. Python中如何将数据存储为json格式的文件
  7. 十大 API 平台网站分享(包括常用的API 大全整理)
  8. C语言使用EsayX库实现简易贪吃蛇
  9. 阿里云云效荣获首个可信云DevOps解决方案国家级标准先进级认证
  10. 你知道你是個什麼樣的人嗎?