Загрузить json Файл в Specifi c Папка в s3 Ведро в Python - PullRequest
1 голос
/ 16 марта 2020

У меня есть python код, который загружает файл json в корзину s3 в AWS. Ниже приведен код, который работает:

ACCESS_KEY = '##########'
SECRET_KEY = '######################/####'


def upload_to_aws(schoolID, bucketName):
    s3 = boto3.client('s3', aws_access_key_id=ACCESS_KEY,
                      aws_secret_access_key=SECRET_KEY)

    try:
        s3.upload_file(schoolID, bucketName, schoolID)
        print(schoolID + " Upload Successful")
        return True
    except FileNotFoundError:
        print(schoolID + " The file was not found")
        return False
    except NoCredentialsError:
        print(schoolID + " Credentials not available")
        return False


uploaded = upload_to_aws(schoolID + '.json', 'bucketName')

Однако теперь я хочу загрузить его в указанную c папку в корзине s3. Я попытался отредактировать следующую строку в приведенном выше коде:

uploaded = upload_to_aws(schoolID + '.json', 'bucketName\AcademicYears')

Но я получил эту ошибку:

ParamValidationError: Parameter validation failed:
Invalid bucket name "bucketName\AcademicYears": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$" or be an ARN matching the regex "^arn:(aws).*:s3:[a-z\-0-9]+:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\-]{1,63}$"

Кто-нибудь знает, как я могу изменить этот код, чтобы он работал? Заранее спасибо

1 Ответ

1 голос
/ 16 марта 2020

Похоже, что вы добавляете в корзину строку, которую AWS отклоняет. Подкаталоги добавляются в ключ корзины.

Если ваш контейнер называется «bucketName», то это верхний каталог. Все, что находится в этом каталоге, будет добавлено к ключу.

Например:

  • bucketName <- bucket </p>

    • AcademicYears <- subdir </p>

      • school_id_file. json <- файл </li>

Попробуйте:

uploaded = upload_to_aws('AcademicYears/' + schoolID + '.json', 'bucketName')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...