Используя библиотеку Amazon s3 boto, как я могу получить URL-адрес сохраненного ключа?

Я сохраняю ключ в ведро с помощью

    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-адресу вновь созданного файла?

Ответ 1

Если ключ является общедоступным (как показано выше), вы можете использовать Key.generate_url:

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

Если ключ является приватным, и вы хотите создать URL-адрес для истечения срока действия, чтобы разделить контент с тем, у кого нет прямого доступа, вы можете сделать:

url = key.generate_url(expires_in=300)

где expires - количество секунд до истечения срока действия URL. Они будут создавать HTTPS-url. Если вы предпочитаете URL-адрес HTTP, используйте это:

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

Ответ 2

Для Boto3 вам нужно сделать это следующим образом...

import boto3

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

Ответ 3

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 вы не можете использовать субдомен.