У мене щось, що мені здається, має дещо більше порядку:
import boto3
from pprint import pprint
from botocore.exceptions import NoCredentialsError
class S3(object):
BUCKET = "test"
connection = None
def __init__(self):
try:
vars = get_s3_credentials("aws")
self.connection = boto3.resource('s3', 'aws_access_key_id',
'aws_secret_access_key')
except(Exception) as error:
print(error)
self.connection = None
def upload_file(self, file_to_upload_path, file_name):
if file_to_upload is None or file_name is None: return False
try:
pprint(file_to_upload)
file_name = "your-folder-inside-s3/{0}".format(file_name)
self.connection.Bucket(self.BUCKET).upload_file(file_to_upload_path,
file_name)
print("Upload Successful")
return True
except FileNotFoundError:
print("The file was not found")
return False
except NoCredentialsError:
print("Credentials not available")
return False
Там вже три важливих змінних тут, то ВЕДРО Const, то file_to_upload і ім'я файлу
BUCKET
: - назва вашого відра S3
file_to_upload_path
: повинен бути шлях до файлу, який ви хочете завантажити
file_name
: це отриманий файл і шлях у вашому відрі (саме тут ви додаєте папки чи що завгодно)
Існує багато способів, але ви можете повторно використовувати цей код у іншому подібному сценарії
import S3
def some_function():
S3.S3().upload_file(path_to_file, final_file_name)