Download file from AWS S3 using Python

前端 未结 3 968
梦如初夏
梦如初夏 2020-12-24 02:12

I am trying to download a file from Amazon S3 bucket to my local using the below code but I get an error saying \"Unable to locate credentials\"

Given below is the c

3条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-24 02:44

    From an example in the official documentation, the correct format is:

    import boto3
    
    s3 = boto3.client('s3', aws_access_key_id=... , aws_secret_access_key=...)
    s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME')
    

    You can also use a file-like object opened in binary mode.

    s3 = boto3.client('s3', aws_access_key_id=... , aws_secret_access_key=...)
    with open('FILE_NAME', 'wb') as f:
        s3.download_fileobj('BUCKET_NAME', 'OBJECT_NAME', f)
    

    The code in question uses s3 = boto3.client ('s3'), which does not provide any credentials.

    The format for authenticating a client is shown here:

    import boto3
    client = boto3.client(
        's3',
        aws_access_key_id=ACCESS_KEY,
        aws_secret_access_key=SECRET_KEY,
        aws_session_token=SESSION_TOKEN,
    )
    
    # Or via the Session
    session = boto3.Session(
        aws_access_key_id=ACCESS_KEY,
        aws_secret_access_key=SECRET_KEY,
        aws_session_token=SESSION_TOKEN,
    )
    

    And lastly you can also re-use the authenticated session you created to get the bucket, and then download then file from the bucket.

    from boto3.session import Session
    import boto3
    
    ACCESS_KEY = 'ABC'
    SECRET_KEY = 'XYZ'
    
    session = Session(aws_access_key_id=ACCESS_KEY,
                  aws_secret_access_key=SECRET_KEY)
    
    # session is authenticated and can access the resource in question 
    session.resource('s3')
        .Bucket('bucket_name')
        .download_file('k.png','/Users/username/Desktop/k.png')
    

提交回复
热议问题