[英]How to generate url from boto3 in amazon web services
我在 s3 中有一个 Bucket,我正在尝试提取其中图像的 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})
我被迫做的一件事是,我必须使用 session object 将参数与每个请求一起发送。并且上述方法不允许我设置 session 变量(即 ..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 object 这是一个 object 叫
botocore.response.StreamingBody object at 0x7ffaff8cef50
我可以通过这种方式获得图像的 url 吗?
能够获得结果,并且在获取签名URL时没有任何问题。 我使用默认会话,因为我的AWS凭据存储在本地“〜/ .aws / credentials”文件中,并且根据需要将我的默认区域设置为〜/ .aws / config
import boto3
s3Client = boto3.client('s3')
s3Client.generate_presigned_url('get_object', Params = {'Bucket': 'www.mybucket.com', 'Key': 'hello.txt'}, ExpiresIn = 100)
如果您需要为Session传递参数,请导入boto3.session并创建自定义会话
import boto3.session
session = boto3.session.Session(region_name='eu-central-1')
s3Client = session.client('s3')
如果不想使用aws configure
命令,可以像这样直接传递凭据并生成公共 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.