简体   繁体   中英

How to generate url from boto3 in amazon web services

I have a Bucket in s3 and I am trying to pull the url of the image that is in there.

I am using boto3 and boto3 doesn't seem to have an implemented generate url method.

They have a core method, that generates url like this,

import botocore.session

session = botocore.session.get_session()
client = session.create_client('s3')

presigned_url = client.generate_presigned_url(
    'get_object', Params={'Bucket': self.bucket_name, 'Key': self.key})

One thing I am forced to do is, I have to send the parameters along with each request using session object. And the above method does not allow me to set the session variables (ie.. aws credentials)

The closest I can get is this

session = Session(aws_access_key_id='342342342342', aws_secret_access_key='3434234322', region_name='us-east-1')
    s3 = session.resource('s3')
    object = s3.Object('my-dev-bucket', 'amazonKeyString')
    print object.get()["Body"]

This gets me amazon s3 object which is an object called

botocore.response.StreamingBody object at 0x7ffaff8cef50

Can I get a url of the image this way?

Able to get results and did not face any issues in getting the signed URL. I used the default session since my aws creds were stored locally in "~/.aws/credentials" file and my default region is set as needed ~/.aws/config

import boto3
s3Client = boto3.client('s3')
s3Client.generate_presigned_url('get_object', Params = {'Bucket': 'www.mybucket.com', 'Key': 'hello.txt'}, ExpiresIn = 100)

If you need to pass params for Session, import boto3.session and create custom session

import boto3.session
session = boto3.session.Session(region_name='eu-central-1')
s3Client = session.client('s3')

If you don't want to use aws configure command, you can pass the credentials directly like this and generate the public URL.

def generate_public_url(bucket_name, file_name, aws_region, aws_key_id, aws_secret, timeout=300):
    #if not object_exists(bucket_name, file_name):
    #    raise Exception(f"0 or many items found in bucket '{bucket_name}' with key '{file_name}')")
    s3_client = boto3.client('s3', config=Config(signature_version='s3v4'),
                             region_name=aws_region, aws_access_key_id=aws_key_id, aws_secret_access_key=aws_secret)
    url = s3_client.generate_presigned_url(
        ClientMethod='get_object',
        Params={
            'Bucket': bucket_name,
            'Key': file_name
        },
        ExpiresIn=timeout  # seconds
    )
    return url

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM