Невозможно удалить файл из s3 с помощью boto3 - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь навсегда удалить файл из S3, используя boto3. Мои корзины не используют версии.

Я пробовал два способа:

def remove_aws_object(bucket_name, item_key):
    ''' Provide bucket name and item key, remove from S3
    '''
    s3_client = boto3.client('s3',
                             aws_access_key_id=AWS_ACCESS_KEY,
                             aws_secret_access_key=AWS_SECRET)
    delete = s3_client.delete_object(Bucket=bucket_name, Key=item_key)
    print(delete)
{'ResponseMetadata': {'RequestId': '61F3C195D373B0C5', 'HostId': 'pigcx1wtIN+Y8RU3zJKliWXcXrHXHzpdAOuGBL64x3V9YefQbWXPZi9B/9F', 'HTTPStatusCode': 204, 'HTTPHeaders': {'x-amz-id-2': 'pigcx1wtIN+Y8RU3zJKliWXcXrHXHzpdAOuGBL64x3V9YefQbWXPZi9B/9FLazUSsCds8f4=', 'x-amz-request-id': '61F3C195D373B0C5', 'date': 'Thu, 13 Feb 2020 09:07:50 GMT', 'server': 'AmazonS3'}, 'RetryAttempts': 0}}

, а также через объект:

def remove_aws_object(bucket_name, item_key):
    ''' Provide bucket name and item key, remove from S3
    '''
    s3_client = boto3.resource('s3',
                             aws_access_key_id=AWS_ACCESS_KEY,
                             aws_secret_access_key=AWS_SECRET)

    my_object = s3_client.Object(bucket_name, item_key)
    a = my_object.delete()
    print(a)
    {'ResponseMetadata': {'RequestId': '6074B9CA870773CE', 'HostId': 'rQoK+x+xcjAw2T3DpTHMWQb4Gq6DzPJy2qFoFHQCYoGwb8/p7700+Nk+6gBIERN', 'HTTPStatusCode': 204, 'HTTPHeaders': {'x-amz-id-2': 'rQoK+x+xcjAw2TKK833DpTHMWQb4Gq6DzPJy2qFoFHQCYoGwb8/p7700+Nk+6gBIE', 'x-amz-request-id': '6074B9CA870773CE', 'date': 'Thu, 13 Feb 2020 12:02:36 GMT', 'x-amz-version-id': 'null', 'x-amz-delete-marker': 'true', 'server': 'AmazonS3'}, 'RetryAttempts': 0}, 'DeleteMarker': True, 'VersionId': 'null'}

Оба метода работают без ошибок, но не удаляйте файл, я все еще могу видеть его в консоли S3, и тогда мне придется удалить его вручную. Я что-то не так делаю?

Ответы [ 3 ]

0 голосов
/ 15 февраля 2020

Вы уверены, что файл существует? По вашему ответу вы получите HttpStatusCode: 204, что означает, что нет содержимого, доступного с параметрами, которые вы отправили. Можете ли вы показать пример ваших значений Bucket / key? Т.е. показать точную структуру строки, которую вы передаете этим переменным?

0 голосов
/ 17 февраля 2020

Это было довольно простое решение, мои элементы хранятся в структуре папок, и мне нужно было передать местоположение папки вместе с ключом элемента.

def remove_aws_object(bucket_name, item_key):
    ''' Provide bucket name and item key, remove from S3
    '''
    folder = "foo/bar/"
    delete_key = folder + item_key
    s3_client = boto3.client('s3',
                             aws_access_key_id=AWS_ACCESS_KEY,
                             aws_secret_access_key=AWS_SECRET)
    delete = s3_client.delete_object(Bucket=bucket_name, Key=delete_key)
0 голосов
/ 15 февраля 2020

Чтобы воспроизвести вашу ситуацию, я сделал следующее:

  • Создал новое ведро в консоли управления Amazon S3
  • Загрузил файл в ведро через консоль управления
  • Использовал ваш код (первый пример) для удаления объекта

Объект был успешно удален.

Итак, код в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...