如何压缩保存在S3上的文件而不保存到本地计算机

时间:2019-11-25 09:03:56

标签: amazon-s3

我不得不压缩并上传一个文件,该文件保存在Amazon S3 上,而没有保存到本地计算机上。 如果可以保存到本地计算机,则可以使用以下bash命令。

aws s3 cp s3://myBucket/doc/to/sensitive_file .
gzip sensitive_file
aws s3 cp sensitive_file.gz s3://myBucket/doc/to/sensitive_file.gz

但是,我无法保存。有人知道好主意吗?我可以使用bash和python。

我做什么

我读了Amazon S3 Compressing Files?,但我解决不了。

环境

  • macOSMojave 10.14.6
  • GNU bash,版本3.2.57(1)-发行版(x86_64-apple-darwin18)
  • Python 3.6.3

1 个答案:

答案 0 :(得分:0)

通过使用python3,我可以按照以下3个步骤压缩并上传到Amazon S3。

  1. 使用BytesIO包,获取内容并保存到变量。
  2. 使用BytesIO和GzipFile包压缩内容。
  3. 将压缩文件放入Amazon S3

这是代码。

import boto3
from io import BytesIO
from gzip import GzipFile


def compress_on_s3(bucket, from_key, to_key):

    s3 = boto3.resource('s3')
    with BytesIO() as input_buf:
        s3.Object(bucket, from_key).download_fileobj(input_buf)
        input_buf.seek(0)
        data = input_buf.getvalue()

    with BytesIO() as buf:
        with GzipFile(fileobj=buf, mode='w') as gz_file:
            gz_file.write(data)

        s3.Object(bucket, to_key).put(Body=buf.getvalue())


compress_on_s3("myBucket", "doc/to/sensitive_file", "doc/to/sensitive_file.gz")