python压缩文件,Django下载zip文件
python压缩文件
-
使用
zipfile
import zipfile def convert_zip(zip_path, save_path): ''' # zip_path 要压缩文件的路径 # save_path 文件压缩后保存的路径 ''' local_path = os.path.join(zip_path, "x.xls") zip = zipfile.ZipFile(save_path, "w") # zipfile.ZIP_DEFLATED zip.write(local_path, 'x.xls') zip.close() convert_zip(zip_path, save_path)
Django下载zip文件
- Django使用临时文件夹tempfile下载其他文件,并压缩为zip文件返回给前端
-
使用
BytesIO()
和tempfile
下载import io def contract_download(download_urls): ''' downloads_urls 要批量下载并且压缩的文件 ''' # 创建BytesIO s = io.BytesIO() # 创建一个临时文件夹用来保存下载的文件 temp = tempfile.TemporaryDirectory() # 使用BytesIO生成压缩文件 zip = zipfile.ZipFile(s, 'w') for i in download_urls: f_name = "{}.pdf".format(i['name']) local_path = os.path.join(temp.name, f_name) # 下载文件 ur.urlretrieve(i['download_url'], local_path) # 把下载文件的写入压缩文件 zip.write(local_path, f_name) # 关闭文件 zip.close() # 指针回到初始位置,没有这一句前端得到的zip文件会损坏 s.seek(0) # 用FileWrapper类来迭代器化一下文件对象,实例化出一个经过更适合大文件下载场景的文件对象,实现原理相当与把内容一点点从文件中读取,放到内存,下载下来,直到完成整个下载过程。这样内存就不会担心你一下子占用它那么多空间了。 wrapper = FileWrapper(s) response = HttpResponse(wrapper, content_type='application/zip') response['Content-Disposition'] = 'attachment; filename={}.zip'.format(datetime.datetime.now().strftime("%Y-%m-%d")) return response download_urls = [{"name":"pdf1","download_url": "http://xxx.pdf"}, {"name":"pdf2", "download_url": "http://xxx2.pdf"}] contract_download(download_urls)
参考链接:时光不写博客-Django下载zip文件
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
HashMap面试必问的6个点,你知道几个?
一、HashMap的实现原理? 此题可以组成如下连环炮来问 你看过HashMap源码嘛,知道原理嘛?为什么用数组+链表?hash冲突你还知道哪些解决办法?我用LinkedList代替数组结构可以么?既然是可以的,为什么HashMap不用LinkedList,而选用数组?1.你看过HashMap源码嘛,知道原理嘛? 针对这个问题,嗯,当然是必须看过HashMap源码。至于原理,下面那张图很清楚了: HashMap采用Entry数组来存储key-value对,每一个键值对组成了一个Entry实体,Entry类实际上是一个单向的链表结构,它具有Next指针,可以连接下一个Entry实体。 只是在JDK1.8中,链表长度大于8的时候,链表会转成红黑树! 2.为什么用数组+链表? 数组是用来确定桶的位置,利用元素的key的hash值对数组长度取模得到. 链表是用来解决hash冲突问题,当出现hash值一样的情形,就在数组上的对应位置形成一条链表。ps:这里的hash值并不是指hashcode,而是将hashcode高低十六位异或过的。至于为什么要这么做,继续往下看。 3.hash冲突你还知道哪些...
- 下一篇
Mac 升级MAMP后 mysql不能使用解决办法
下载最新 MAMP 安装包,安装时会提醒通过菜单栏的 Tools -> Upgrade MySQL databases 可以更新自己的数据库。 但是点击 upgrade 之后,出现报错信息,显示我没有权限进行访问操作。我猜八成数据库账号密码出了问题。然后去应用文件夹目录去找,发现了一些脚本文件。 看名字就知道,是一些启动脚本。打开一些关于 mysql 的脚本发现用户名与密码全都是 root 。然后手动更改并保存,接着我将菜单栏 Tools 中的 check … repaire … upgrade … 全都点了一遍。发现日志信息中,有一些报错的,但是我也没理会。 这时我想打开 phpmyadmin 发现仍然报错。 估计仍然是密码错误的原因,然后我又找到 phpmyadmin 的项目文件夹。打开 config.inc.php文件,发现密码果然不对。将其改正并保存,再次打开网页,成功进入数据库管理界面。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境