Je vois souvent des articles Qiita qui utilisent boto2 pour télécharger des fichiers dans le stockage local, Je n'ai pas pu en trouver un utilisant boto3, donc je posterai celui implémenté en référence au site officiel.
Python 3.6.1 pip 9.0.1
boto3(AWS SDK for python)
$ pip install boto3
Installez également le package pour faire fonctionner les services AWS à partir de la ligne de commande.
$ pip install awscli
Écrivez la clé d'accès, la clé secrète, la région, etc. dans le fichier de configuration. Si vous exécutez la commande suivante puis entrez les données de manière interactive, un fichier sera créé sous votre répertoire personnel.
__ * Dans boto2, la clé d'accès AWS et la clé secrète ont été lues à partir de la source, Dans boto3, récupérez les deux clés ci-dessus dans le fichier de configuration. __ </ font>
$ aws configure
AWS Access Key ID [None]: xxxxxxxxxxxxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxx
Default region name [None]: xxxxxxxxxxxxxxxxxxxxx
Default output format [None]: xxxxxxxxxxxxxxxxxxx
Fichiers générés (2)
~/.aws/credentials
----------------------------------------------
[default]
aws_access_key_id = ACCESS_KEY_ID
aws_secret_access_key = SECRET_ACCESS_KEY
----------------------------------------------
~/.aws/config
----------------------------------------------
[default]
region = [xxxxxxxxxxxxxxxxx]
output = [xxxxxxxxxxxxxxxxx]
----------------------------------------------
Il est généré dans le répertoire personnel, et même lorsque boto3 est exécuté, le fichier ci-dessus dans le répertoire personnel est lu, donc Notez que le déplacement du répertoire .aws entraînera une erreur.
botocore.exceptions.NoCredentialsError: Unable to locate credentials
Si vous le déplacez, l'erreur ci-dessus se produira. Eh bien, les gens ordinaires ne le déplaceraient pas. .. ..
# -*- coding: utf-8 -*-
import sys
import threading
import boto3
# boto3 (.aws/config)
BUCKET_NAME = 'YOUR_BUCKET_NAME'
class ProgressCheck(object):
def __init__(self, filename):
self._filename = filename
self._size = int(os.path.getsize(filename))
self._seen_so_far = 0
self._lock = threading.Lock()
def __call__(self, bytes_amount):
with self._lock:
self._seen_so_far += bytes_amount
percentage = (self._seen_so_far / self._size) * 100
sys.stdout.write(
"\r%s / %s (%.2f%%)" % (
self._seen_so_far, self._size,
percentage))
sys.stdout.flush()
def UploadToS3():
# S3Connection
s3 = boto3.resource('s3')
s3.Object(BUCKET_NAME, 'OBJECT_KEY (S3)').upload_file('UPLOAD_FILE_PATH (lOCAL)')
UploadToS3()
__OBJECT_KEY (S3) __: Définissez la clé d'objet dans S3. </ font> __UPLOAD_FILE_PATH (lOCAL) __: Définissez le chemin du fichier local à télécharger. </ font>
Si vous en avez envie, j'aimerais faire une comparaison avec la méthode upload dans boto2. Jusqu'à la fin Merci d'avoir lu.
Veuillez signaler toute erreur ou mise à jour.