it-swarm.com.de

Laden Sie die Datei mit Python von AWS S3 herunter

Ich versuche, eine Datei aus dem Amazon S3-Bucket mit dem folgenden Code in meinen lokalen Computer herunterzuladen. Ich erhalte jedoch die Fehlermeldung "Anmeldeinformationen können nicht gefunden werden".

Unten ist der Code, den ich geschrieben habe:

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')

Könnte mir jemand dabei helfen? Vielen Dank.

3
Taukheer

Sie verwenden die von Ihnen erstellte Sitzung nicht zum Herunterladen der Datei. Sie verwenden den von Ihnen erstellten s3-Client. Wenn Sie den Client verwenden möchten, müssen Sie die Anmeldeinformationen angeben.

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

oder

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

Weitere Informationen zum Herunterladen von Dateien von AWS S3, die nach einer benutzerfreundlicheren Lösung mit anderen Funktionen für die Industrie suchen, finden Sie unter https://github.com/d6t/d6tpipe . Es abstrahiert die S3-Funktionen in eine einfachere Schnittstelle. Es unterstützt auch die Verzeichnissynchronisierung, das Hochladen von Dateien, Berechtigungen und viele andere Dinge, die Sie zum Synchronisieren von Dateien aus S3 (und FTP) benötigen.

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