我想下载s3文件列表并将其压缩为文件,但是文件列表可能非常大,并且占用大量内存空间。
立即的解决方案是下载所有文件,将其压缩并上传到s3
def upload_zip_file(event,context):
s3 = boto3.client('s3')
list_keys = event['list_keys']
data_io = BytesIO()
filename = "file.pdf"
zf = zipfile.ZipFile(data_io, 'w')
for key in list_keys:
s3_object = s3.get_object(Bucket=DATA_BUCKET_NAME, Key=key)
body = s3_object['Body'].read()
zf.writestr(filename,body, compress_type=zipfile.ZIP_DEFLATED)
zf.close()
s3.upload_fileobj(data_io, ZIP_BUCKET_NAME, filename)
使用这种解决方案,当我下载所有数据时,zip文件的总大小存储在内存中,并且可以大于1 GB。如何在较小的部分上传zip文件,而没有达到完整尺寸?