我使用来自这里的zip流,并有一个Django视图,该视图返回所有文件附件的压缩文件,这些附件都托管在S3上。但是当我下载的时候,压缩文件都被破坏了,也就是说,我不能打开它们。
import io
import zipstream
s = io.BytesIO()
with zipstream.ZipFile(s,"w", compression=zipstream.ZIP_DEFLATED) as zf:
for file_path in file_paths:
file_dir, file_name = os.path.split(file_path)
zf.writestr(file_name, urllib.urlopen(file_path).read())
response = StreamingHttpResponse(s.getvalue(), content_type='application/octet-stream')
response['Content-Disposition'] = 'attachment; filename={}'.format('files.zip')
return response发布于 2022-01-17 16:07:05
而不是安装zipstream包,安装aiozipstream包。如果您已经安装了zipstream包,请先卸载它。pip卸载zipstream,然后执行pip安装aiozipstream
#Do the import in the same way
from zipstream import ZipStream
from django.http import StreamingHttpResponse
def s3_content_generator(key):
#s3_bucket - your s3 bucket name
infile_object = s3.get_object(Bucket=s3_bucket, Key= key)
data = str(infile_object.get('Body', '').read())
yield bytes(data, 'utf-8')
files = []
#filepath - list of s3 keys
for keyin filepath:
files.append({'stream': s3_content_generator(key),'name': 'filename'})
#large chunksize fasten the download process
zf = ZipStream(files, chunksize=32768)
response = StreamingHttpResponse(zf.stream(), content_type='application/zip')
response['Content-Disposition'] = 'attachment; filename={}'.format('files.zip')
return responsehttps://stackoverflow.com/questions/70666639
复制相似问题