Boto:将多个文件上传到s3

时间:2016-10-26 08:21:34

标签: python angular amazon-s3 boto bitbucket-pipelines

我是一名JavaScript / Angular 2开发人员,现在正在使用Bitbucket管道,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 

Here是整个Python s3_upload.py

如您所见,该脚本使用put_object

client.put_object(
    Body=open(artefact, 'rb'),
    Bucket=bucket,
    Key=bucket_key
)

我希望能够将dist文件夹的内容上传到s3。我是否必须学习Python以便能够做到这一点,或者Boto中是否有方法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

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))

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