150 votes

Comment télécharger un fichier vers un répertoire dans un seau S3 à l'aide de boto ?

Je veux copier un fichier dans un seau s3 en utilisant python.

Ex : J'ai un nom de seau = test. Et dans le seau, j'ai 2 dossiers nommés "dump" et "input". Maintenant je veux copier un fichier du répertoire local au dossier "dump" de S3 en utilisant python... Quelqu'un peut-il m'aider ?

126voto

Felipe Garcia Points 1679

NOTE : Cette réponse utilise boto . Voir le autre réponse qui utilise boto3 qui est plus récent .

Essayez ceci...

import boto
import boto.s3
import sys
from boto.s3.key import Key

AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''

bucket_name = AWS_ACCESS_KEY_ID.lower() + '-dump'
conn = boto.connect_s3(AWS_ACCESS_KEY_ID,
        AWS_SECRET_ACCESS_KEY)

bucket = conn.create_bucket(bucket_name,
    location=boto.s3.connection.Location.DEFAULT)

testfile = "replace this with an actual filename"
print 'Uploading %s to Amazon S3 bucket %s' % \
   (testfile, bucket_name)

def percent_cb(complete, total):
    sys.stdout.write('.')
    sys.stdout.flush()

k = Key(bucket)
k.key = 'my test file'
k.set_contents_from_filename(testfile,
    cb=percent_cb, num_cb=10)

[MISE À JOUR] Je ne suis pas un pythoniste, donc merci pour l'info sur les déclarations d'importation. De plus, je ne recommande pas de placer les informations d'identification dans votre propre code source. Si vous exécutez ceci dans AWS, utilisez IAM Credentials avec Instance Profiles ( http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html ), et pour conserver le même comportement dans votre environnement de développement et de test, utilisez quelque chose comme Hologram d'AdRoll ( https://github.com/AdRoll/hologram )

116voto

Boris Points 428
import boto3

s3 = boto3.resource('s3')
BUCKET = "test"

s3.Bucket(BUCKET).upload_file("your/local/file", "dump/file")

50voto

vcarel Points 318

Pas besoin de rendre les choses aussi compliquées :

s3_connection = boto.connect_s3()
bucket = s3_connection.get_bucket('your bucket name')
key = boto.s3.key.Key(bucket, 'some_file.zip')
with open('some_file.zip') as f:
    key.send_file(f)

48voto

Roman Orac Points 1244

Télécharger un fichier vers s3 dans une session avec des informations d'identification.

import boto3

session = boto3.Session(
    aws_access_key_id='AWS_ACCESS_KEY_ID',
    aws_secret_access_key='AWS_SECRET_ACCESS_KEY',
)
s3 = session.resource('s3')
# Filename - File to upload
# Bucket - Bucket to upload to (the top level directory under AWS S3)
# Key - S3 object name (can contain subdirectories). If not specified then file_name is used
s3.meta.client.upload_file(Filename='input_file_path', Bucket='bucket_name', Key='s3_output_key')

36voto

Oren Efron Points 411

J'ai utilisé ce système et il est très simple à mettre en œuvre.

import tinys3

conn = tinys3.Connection('S3_ACCESS_KEY','S3_SECRET_KEY',tls=True)

f = open('some_file.zip','rb')
conn.upload('some_file.zip',f,'my_bucket')

https://www.smore.com/labs/tinys3/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X