From an example in the official documentation, the correct format is:
1 2 3 4 5 |
<span class="hljs-keyword">import</span> boto3 s3 = boto3.client(<span class="hljs-string">'s3'</span>, aws_access_key_id=... , aws_secret_access_key=...) s3.download_file(<span class="hljs-string">'BUCKET_NAME'</span>, <span class="hljs-string">'OBJECT_NAME'</span>, <span class="hljs-string">'FILE_NAME'</span>) |
You can also use a file-like object opened in binary mode.
1 2 3 4 5 |
s3 = boto3.client(<span class="hljs-string">'s3'</span>, aws_access_key_id=... , aws_secret_access_key=...) <span class="hljs-keyword">with</span> <span class="hljs-built_in">open</span>(<span class="hljs-string">'FILE_NAME'</span>, <span class="hljs-string">'wb'</span>) <span class="hljs-keyword">as</span> f: s3.download_fileobj(<span class="hljs-string">'BUCKET_NAME'</span>, <span class="hljs-string">'OBJECT_NAME'</span>, f) f.seek(<span class="hljs-number">0</span>) |
The code in question uses s3 = boto3.client ('s3')
, which does not provide any credentials.
The format for authenticating a client is shown here:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="hljs-keyword">import</span> boto3 client = boto3.client( <span class="hljs-string">'s3'</span>, aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY, aws_session_token=SESSION_TOKEN, ) <span class="hljs-comment"># Or via the Session</span> 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="hljs-keyword">from</span> boto3.session <span class="hljs-keyword">import</span> Session <span class="hljs-keyword">import</span> boto3 ACCESS_KEY = <span class="hljs-string">'ABC'</span> SECRET_KEY = <span class="hljs-string">'XYZ'</span> session = Session(aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY) <span class="hljs-comment"># session is authenticated and can access the resource in question </span> session.resource(<span class="hljs-string">'s3'</span>) .Bucket(<span class="hljs-string">'bucket_name'</span>) .download_file(<span class="hljs-string">'k.png'</span>,<span class="hljs-string">'/Users/username/Desktop/k.png'</span>) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import d6tpipe api = d6tpipe.api.APILocal() # keep permissions locally for security settings = \ { 'name': 'my-files', 'protocol': 's3', 'location': 'bucket-name', 'readCredentials' : { 'aws_access_key_id': 'AAA', 'aws_secret_access_key': 'BBB' } } d6tpipe.api.create_pipe_with_remote(api, settings) pipe = d6tpipe.Pipe(api, 'my-files') pipe.scan_remote() # show all files pipe.pull_preview() # preview pipe.pull(['k.png']) # download single file pipe.pull() # download all files pipe.files() # show files file=open(pipe.dirpath/'k.png') # access file |