批量生成预签名URL boto3

tre*_*son 0 python amazon-s3 amazon-web-services boto3

我目前正在使用以下内容为存储桶资源创建预先签名的URL:

bucket_name = ...
key = ...
s3_client = ...

s3_client.generate_presigned_url(
    ClientMethod="get_object",
    Params={
        "Bucket": bucket_name,
        "Key": key
    },
    ExpiresIn=100
)
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,我想知道是否可以在一个请求中为多个密钥生成预先签名的URL?或者是否需要为每个密钥发出一个请求?我没有在有关此主题的文档中找到任何有用的内容.我正在寻找这样的东西:

bucket_name = ...
keys = [...]
s3_client = ...

# Returns an array of pre-signed urls, in the same order as `keys`
s3_client.generate_presigned_url(
    ClientMethod="get_object",
    Params={
        "Bucket": bucket_name,
        "Keys": keys
    },
    ExpiresIn=100
)
Run Code Online (Sandbox Code Playgroud)

Joh*_*ein 5

生成预签名URL实际上是在本地完成的,无需调用AWS.这是因为所有必要的信息(Bucket,Key,Secret Key)在本地都是已知的并且可以生成签名.

因此,可以随意重复调用该函数,因为没有网络/服务开销.

通常,不需要批量生成URL.相反,只要您的应用程序希望引用资源(例如HTML页面上的图像),它就可以generate_presigned_url()使用适当的超时快速调用该函数.

  • 请注意,如果在循环中生成多个签名 URL,您可能希望重用 S3 客户端对象。实例化该对象可能会不必要地耗费时间/资源。 (3认同)