Boto:上传多个文件到S3

3

我是一名JavaScript / Angular 2开发人员,现在开始使用Bitbucket pipelines、Python和Boto进行S3集成的部署。这三种技术昨天才被介绍给我!

我的webpack构建生成一个名为dist的文件夹,其中包含我想要上传到S3的所有文件。我希望这些文件出现在S3桶的根目录中。

我的bitbucket-pipelines.yaml中有以下内容:

image: node:5.6.0

pipelines:
  default:
    - step:
        script:
          # other stuff..,
          - python s3_upload.py io-master.mycompany.co.uk dist io-dist 

这里是完整的Python s3_upload.py脚本,您可以点击此处查看。
正如您所见,该脚本使用了put_object函数。
client.put_object(
    Body=open(artefact, 'rb'),
    Bucket=bucket,
    Key=bucket_key
)

我想做的是将dist文件夹的内容上传到s3。我是否需要学习Python才能实现这一点,还是Boto中已经有了相应的方法?

1个回答

3
def sync_to_s3(target_dir, aws_region=AWS_REGION, bucket_name=BUCKET_NAME):
    if not os.path.isdir(target_dir):
        raise ValueError('target_dir %r not found.' % target_dir)

    s3 = boto3.resource('s3', region_name=aws_region)
    try:
        s3.create_bucket(Bucket=bucket_name,
                         CreateBucketConfiguration={'LocationConstraint': aws_region})
    except ClientError:
        pass

    for filename in os.listdir(target_dir):
        logger.warn('Uploading %s to Amazon S3 bucket %s' % (filename, bucket_name))
        s3.Object(bucket_name, filename).put(Body=open(os.path.join(target_dir, filename), 'rb'))

        logger.info('File uploaded to https://s3.%s.amazonaws.com/%s/%s' % (
            aws_region, bucket_name, filename))

您可以将文件夹作为参数传递并迭代文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接