Django|Django 利用zipstream压缩下载多文件夹
1、安装 zipstream
pip install zipstream
【Django|Django 利用zipstream压缩下载多文件夹】2、简单封装下zipstream
# -*- coding: UTF-8 -*-
import zipfile
import os
import zipstream
class ZipUtilities:
zip_file = Nonedef __init__(self):
self.zip_file = zipstream.ZipFile(mode='w', compression=zipstream.ZIP_DEFLATED)def toZip(self, file, name):
if os.path.isfile(file):
self.zip_file.write(file, arcname=os.path.basename(file))
else:
self.addFolderToZip(file, name)def addFolderToZip(self, folder, name):
for file in os.listdir(folder):
full_path = os.path.join(folder, file)
if os.path.isfile(full_path):
self.zip_file.write(full_path, arcname=os.path.join(name, os.path.basename(full_path)))
elif os.path.isdir(full_path):
self.addFolderToZip(full_path, os.path.join(name, os.path.basename(full_path)))def close(self):
if self.zip_file:
self.zip_file.close()
3、views.py 使用
utilities = ZipUtilities()
for file_obj in file_objs:
tmp_dl_path = os.path.join(path_to, filename)
utilities.toZip(tmp_dl_path, filename)
#utilities.close()
response = StreamingHttpResponse(utilities.zip_file, content_type='application/zip')
response['Content-Disposition'] = 'attachment;
filename="{0}"'.format("下载.zip")
return response
推荐阅读
- django-前后端交互
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- 【万伽复利】什么是复利(如何利用复利赚钱?)
- django2.2|django2.2 一般项目步骤(初步)
- 苹果手机如何利用库乐队自制铃声
- django|django 自定义.save()方法
- django|django 获取用户的域名
- “没有利用价值的人是很受冷遇的。”
- django开发电子商城(二十二)购物车商品的所有者身份转换
- 可悲的好人