簡體   English   中英

如何在亞馬遜 web 服務中從 boto3 生成 url

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM