如何从亚马逊web服务中的boto3生成url

问题描述:

我在s3中有一个Bucket,我试图拉出那里的图片的网址。如何从亚马逊web服务中的boto3生成url

我正在使用boto3和boto3似乎没有实现生成url方法。

他们有一个核心的方法,产生的URL是这样,

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

有一件事我不得不做的是,我必须使用会话对象的每个请求一起发送的参数。和上面的方法不允许我设置会话变量(即.. AWS凭证)

我能得到的最接近的是这

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"] 

这让我的Amazon S3对象,它是一个对象调用

botocore.response.StreamingBody object at 0x7ffaff8cef50 

我可以通过这种方式获取图片的网址吗?

请帮助 普拉巴卡尔小号

+1

退房的boto3 github上[这个问题线索](https://github.com/boto/boto3/issues/110)。 – Monkpit

+0

Monkpit,我已经尝试过了,唯一使用这种方法的是,我无法在参数中设置会话变量。这会生成url,但它不会查找我在代码中给出的会话变量。 –

+1

您可以在创建[boto3客户端](http://boto3.readthedocs.org/en/latest/reference/core/session.html#boto3.session.Session.client) –

抽到结果和获得标识的URL没有遇到任何问题。 我用,因为我的AWS creds是在“〜/ .aws /资格证书”的文件存储在本地和我的默认区域设置为需要的〜/ .aws /配置

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

如果你需要传递PARAMS默认会话对于会话,进口boto3.session并创建自定义会话

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