代码之家  ›  专栏  ›  技术社区  ›  Sriram

S3 Boto3 python-将所有文件acl更改为公共读取

  •  0
  • Sriram  · 技术社区  · 6 年前

    我正在尝试将S3 bucket文件夹中500k文件的ACL从“private”更改为“public read”

    有没有办法加快速度?

    我正在使用下面的代码片段。

    from boto3.session import Session
    from multiprocessing.pool import ThreadPool
    pool = ThreadPool(processes=100)
    
    BUCKET_NAME = ""
    aws_access_key_id = ""
    aws_secret_access_key = ""
    Prefix='pics/'
    
    session = Session(aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key)
    _s3 = session.resource("s3")
    _bucket = _s3.Bucket(BUCKET_NAME)
    
    def upload(eachObject):
        eachObject.Acl().put(ACL='public-read')
    
    counter = 0
    filenames = []
    for eachObject in _bucket.objects.filter(Prefix=Prefix):
        counter += 1
        filenames.append(eachObject)
        if counter % 100 == 0:
            pool.map(upload, filenames)
            print(counter)
    if filenames:
        pool.map(upload, filenames)
    
    0 回复  |  直到 6 年前
        1
  •  0
  •   Ethan Harris    4 年前

    据我所知,如果不将ACL应用于整个bucket,就无法简单地将ACL应用于包含相同前缀的所有项,而不遍历每个项,如下所示:

    bucketName='YOUR_BUCKET_NAME'
    prefix="YOUR_FOLDER_PREFIX"
    
    s3 = boto3.resource('s3')
    bucket = s3.Bucket(bucketName)
    
    [obj.Acl().put(ACL='public-read') for obj in bucket.objects.filter(Prefix=prefix).all()]