使用Amazon s3 boto库,如何获取已保存密钥的URL?

时间:2013-04-22 20:24:17

标签: python amazon-s3 boto

我正在将一个密钥保存到一个桶中:

    key = bucket.new_key(fileName)
    key.set_contents_from_string(base64.b64decode(data))
    key.set_metadata('Content-Type', 'image/jpeg')
    key.set_acl('public-read')

保存成功后,如何访问新创建文件的URL?

3 个答案:

答案 0 :(得分:93)

如果密钥是公开可读的(如上所示),您可以使用Key.generate_url

url = key.generate_url(expires_in=0, query_auth=False)

如果该密钥是私密的,并且您希望生成一个过期的URL以与没有直接访问权限的人共享内容,则可以执行以下操作:

url = key.generate_url(expires_in=300)

其中expires是URL过期前的秒数。这些将生成HTTPS网址。如果您更喜欢HTTP网址,请使用:

url = key.generate_url(expires_in=0, query_auth=False, force_http=True)

答案 1 :(得分:28)

对于Boto3,你需要按照以下方式进行...

import boto3

s3 = boto3.client('s3')
url = '{}/{}/{}'.format(s3.meta.endpoint_url, bucket, key)

答案 2 :(得分:8)

import boto
from boto.s3.connection import S3Connection

conn = S3Connection('AWS_ACCESS_KEY', 'AWS_SECRET_KEY')

secure_https_url = 'https://{host}/{bucket}/{key}'.format(
    host=conn.server_name(),
    bucket='name-of-bucket',
    key='name_of_key')

http_url = 'http://{bucket}.{host}/{key}'.format(
    host=conn.server_name(),
    bucket='name-of-bucket',
    key='name_of_key')

这就是我在boto 2.23.0中为公共URL做的。我无法使用expires_in = None参数。

请注意,对于HTTPS,您无法使用子域。