您现在的位置是:首页 > 文章详情

python压缩文件,Django下载zip文件

日期:2019-08-20点击:702

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文件

原文链接:https://yq.aliyun.com/articles/715338
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章