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 ?

20voto

Manish Mehra Points 506
from boto3.s3.transfer import S3Transfer
import boto3
#have all the variables populated which are required below
client = boto3.client('s3', aws_access_key_id=access_key,aws_secret_access_key=secret_key)
transfer = S3Transfer(client)
transfer.upload_file(filepath, bucket_name, folder_name+"/"+filename)

14voto

Nde Samuel Mbah Points 444

C'est un trois-pièces. Il suffit de suivre les instructions sur le documentation boto3 .

import boto3
s3 = boto3.resource(service_name = 's3')
s3.meta.client.upload_file(Filename = 'C:/foo/bar/baz.filetype', Bucket = 'yourbucketname', Key = 'baz.filetype')

Certains arguments importants sont :

Paramètres :

  • Nom de fichier ( str ) -- Le chemin d'accès au fichier à télécharger.
  • Seau ( str ) -- Le nom du seau à télécharger.
  • Clé ( str ) -- Le nom de celui que vous voulez attribuer à votre fichier dans votre seau s3. Il peut s'agir du même nom que le fichier ou d'un nom différent de votre choix, mais le type de fichier doit rester le même.

    Note : Je suppose que vous avez enregistré vos informations d'identification dans un fichier ~\.aws comme suggéré dans le les meilleures pratiques de configuration dans la documentation boto3 .

12voto

Piyush S. Wanare Points 1975

Cela fonctionnera également :

import os 
import boto
import boto.s3.connection
from boto.s3.key import Key

try:

    conn = boto.s3.connect_to_region('us-east-1',
    aws_access_key_id = 'AWS-Access-Key',
    aws_secret_access_key = 'AWS-Secrete-Key',
    # host = 's3-website-us-east-1.amazonaws.com',
    # is_secure=True,               # uncomment if you are not using ssl
    calling_format = boto.s3.connection.OrdinaryCallingFormat(),
    )

    bucket = conn.get_bucket('YourBucketName')
    key_name = 'FileToUpload'
    path = 'images/holiday' #Directory Under which file should get upload
    full_key_name = os.path.join(path, key_name)
    k = bucket.new_key(full_key_name)
    k.set_contents_from_filename(key_name)

except Exception,e:
    print str(e)
    print "error"

9voto

Noufal Valapra Points 81

Utilisation de boto3

import logging
import boto3
from botocore.exceptions import ClientError

def upload_file(file_name, bucket, object_name=None):
    """Upload a file to an S3 bucket

    :param file_name: File to upload
    :param bucket: Bucket to upload to
    :param object_name: S3 object name. If not specified then file_name is used
    :return: True if file was uploaded, else False
    """

    # If S3 object_name was not specified, use file_name
    if object_name is None:
        object_name = file_name

    # Upload the file
    s3_client = boto3.client('s3')
    try:
        response = s3_client.upload_file(file_name, bucket, object_name)
    except ClientError as e:
        logging.error(e)
        return False
    return True

Pour en savoir plus:- https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-uploading-files.html

5voto

redsnowfox Points 855
import boto
from boto.s3.key import Key

AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''
END_POINT = ''                          # eg. us-east-1
S3_HOST = ''                            # eg. s3.us-east-1.amazonaws.com
BUCKET_NAME = 'test'        
FILENAME = 'upload.txt'                
UPLOADED_FILENAME = 'dumps/upload.txt'
# include folders in file path. If it doesn't exist, it will be created

s3 = boto.s3.connect_to_region(END_POINT,
                           aws_access_key_id=AWS_ACCESS_KEY_ID,
                           aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                           host=S3_HOST)

bucket = s3.get_bucket(BUCKET_NAME)
k = Key(bucket)
k.key = UPLOADED_FILENAME
k.set_contents_from_filename(FILENAME)

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