web-dev-qa-db-fra.com

À l'aide de la bibliothèque boto d'Amazon s3, comment puis-je obtenir l'URL d'une clé enregistrée?

J'économise une clé dans un seau avec:

    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')

Une fois l'enregistrement réussi, comment puis-je accéder à l'URL du fichier nouvellement créé?

52
S-K'

Si la clé est lisible publiquement (comme illustré ci-dessus), vous pouvez utiliser Key.generate_url :

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

Si la clé est privée et que vous souhaitez générer une URL expirant pour partager le contenu avec quelqu'un qui n'a pas d'accès direct, vous pouvez faire:

url = key.generate_url(expires_in=300)

expires est le nombre de secondes avant l'expiration de l'URL. Ceux-ci produiront des URL HTTPS. Si vous préférez une URL HTTP, utilisez ceci:

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

Pour Boto3, vous devez le faire de la manière suivante ...

import boto3

s3 = boto3.client('s3')
url = '{}/{}/{}'.format(s3.meta.endpoint_url, bucket, key)
29
treecoder
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')

C'est comme ça que je l'ai fait dans boto 2.23.0 pour une URL publique. Je n'ai pas pu faire fonctionner l'argument expires_in = None.

Notez que pour HTTPS, vous ne pouvez pas utiliser de sous-domaine.

8
kumar303