Как создать и загрузить большой zip-файл на s3 с нехваткой памяти, используя python - PullRequest
0 голосов
/ 29 мая 2019

Я хочу загрузить список файлов 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 ГБ. Как я могу загрузить почтовый индекс небольшими частями, не достигнув полного размера?.

...