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

S-K*_*-K' 54 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')
Run Code Online (Sandbox Code Playgroud)

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

gar*_*aat 98

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

url = key.generate_url(expires_in=0, query_auth=False)
Run Code Online (Sandbox Code Playgroud)

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

url = key.generate_url(expires_in=300)
Run Code Online (Sandbox Code Playgroud)

expiresURL到期前的秒数在哪里.这些将生成HTTPS网址.如果您更喜欢HTTP网址,请使用以下命令:

url = key.generate_url(expires_in=0, query_auth=False, force_http=True)
Run Code Online (Sandbox Code Playgroud)

  • 使用boto 2.9.6我不得不使用`expires_in = 0`.`expires_in = None`给了我一个错误. (13认同)
  • 值得注意的是`expires_in = 0`是"现在到期!" 在博托2.3.0 (4认同)
  • 如果密钥是公共的(例如,您调用make_public()),则expires_in = 0不执行任何操作 - > generate_url生成的url将永不过期.在boto 2.2.2中,generate_url(expires_in = None)抛出错误,因为尝试计算到期日期为"expires = int(time.time()+ expires_in)" (3认同)
  • @Seth那个链接是boto,而不是boto3.这个问题是关于boto3. (3认同)

tre*_*der 30

对于Boto3,您需要按以下方式执行此操作...

import boto3

s3 = boto3.client('s3')
url = '{}/{}/{}'.format(s3.meta.endpoint_url, bucket, key)
Run Code Online (Sandbox Code Playgroud)


kum*_*303 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')
Run Code Online (Sandbox Code Playgroud)

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

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