【问题标题】:S3 Boto3 python - change all files acl to public readS3 Boto3 python - 将所有文件 acl 更改为公共读取
【发布时间】:2020-05-02 01:20:48
【问题描述】:

我正在尝试将 S3 存储桶文件夹中 500k 文件的 ACL 从“私有”更改为“公共读取”

有什么办法可以加快速度吗?

我正在使用下面的 sn-p。

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)

【问题讨论】:

    标签: amazon-s3 boto3


    【解决方案1】:

    据我所知,如果不将 ACL 应用于整个存储桶,就无法简单地将 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()]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-21
      • 2020-06-15
      • 2021-10-15
      • 1970-01-01
      • 2021-03-09
      • 2018-03-29
      • 1970-01-01
      • 2019-11-26
      相关资源
      最近更新 更多