我尝试使用python中的boto3生成用于访问存储在AWS S3中的照片的签名。以下是我使用的代码:
# pass in the credentials and generate an s3 session
s3_session = boto3.Session(
aws_access_key_id=aws_access_key,
aws_secret_access_key=aws_secret_key)
# now create an s3 client
c = s3_session.client('s3')
signature = c.generate_presigned_url('get_object',
ExpiresIn=expiry_time,
Params={'Bucket': bucket,
'Key': path
})
我试图同时为许多文件执行此操作。是否可以一次传递多个键(或者更广泛地说,一次获得多个签名)而不是为每个键循环使用它?我尝试为path
传递一个列表,但我得到了ParamValidationError
。
答案 0 :(得分:0)
generate_presigned_url()
函数一次只生成一个签名。
请注意不涉及回拨AWS - 签名是根据提供的信息在本地计算的。因此,只需在循环中调用它,您就可以非常快速地生成结果。
但是,您希望同时生成许多签名是非常奇怪的。正常用法是在用户请求对象时生成预签名URL。这样,URL可以是时间限制的(例如5分钟)。 5分钟后,URL将不再起作用。
许多人似乎想要生成预先签名的URL并将其保存在数据库中,但这是一种反模式,因为URL没有与当前用户相关的到期时间。
底线:根据需要生成预先签名的网址,一次一个。