web-dev-qa-db-fra.com

Téléchargez le fichier à partir d'AWS S3 à l'aide de Python

J'essaie de télécharger un fichier du compartiment Amazon S3 sur mon site local à l'aide du code ci-dessous, mais un message d'erreur "Impossible de localiser les informations d'identification" s'affiche.

Ci-dessous, le code que j'ai écrit:

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)
s3 = session.resource('s3')
your_bucket = s3.Bucket('bucket_name')

for s3_file in your_bucket.objects.all():
print(s3_file.key)

s3 = boto3.client ('s3')

s3.download_file('your_bucket','k.png','/Users/username/Desktop/k.png')

Quelqu'un pourrait-il m'aider à ce sujet? Merci.

3
Taukheer

Vous n'utilisez pas la session que vous avez créée pour télécharger le fichier, vous utilisez le client s3 que vous avez créé. Si vous souhaitez utiliser le client, vous devez spécifier les informations d'identification.

your_bucket.download_file('k.png', '/Users/username/Desktop/k.png')

ou

s3 = boto3.client('s3', aws_access_key_id=... , aws_secret_access_key=...)
s3.download_file('your_bucket','k.png','/Users/username/Desktop/k.png')
4
Joaquín Bucca

Pour ceux qui essaient de télécharger des fichiers depuis AWS S3 et qui recherchent une solution plus conviviale avec d’autres fonctionnalités industrielles, consultez https://github.com/d6t/d6tpipe . Il résume les fonctions S3 dans une interface plus simple. Il prend également en charge la synchronisation de répertoires, le téléchargement de fichiers, les autorisations et bien d’autres choses dont vous avez besoin pour synchroniser les fichiers à partir de S3 (et ftp).

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
0
citynorman