Заменить файл в s3 python boto3

#python #amazon-web-services #amazon-s3 #aws-lambda #boto3

#python #amazon-веб-сервисы #amazon-s3 #aws-лямбда #бото3 #aws-lambda #boto3

Вопрос:

Если нам нужно полностью заменить existing file указанный путь к папке s3 на другой файл (with different filename) , используя python (lambda)

В любой момент времени конкретный путь к папке в s3 содержал бы только один файл, который был бы полностью заменен другим при запуске кода python

Какую функцию boto можно было бы использовать для вышеуказанного. Спасибо!

Комментарии:

1. Что вы подразумеваете под «заменой файла другим именем файла»? Если у него другое имя файла, значит, это другой файл, так что же вы подразумеваете под «заменить»? Вы хотите просто удалить существующий файл при загрузке нового файла?

2. В этом случае вы бы использовали delete_object() и upload_file() .

3. То, что вы описываете, не является обновлением файла. Файл «обновляется», если загружен файл с тем же именем . То, что вы описываете, — это загрузка совершенно другого файла (потому что у него другое имя), поэтому ничего не «обновляется». Это все равно, что просить «обновить» автомобиль Ford до автомобиля Toyota, когда транзакция действительно включает продажу одного автомобиля и покупку другого.

Ответ №1:

Чтобы сделать это, вам просто нужно вызвать функцию upload_object, которая на самом деле является оболочкой для функции put_object.

Вызов функции будет выглядеть следующим образом.

 import boto3
s3 = boto3.resource('s3')
s3.meta.client.upload_file('/tmp/hello.txt', 'mybucket', 'replace/this/file.txt')
  

Пока у вас не включено управление версиями объектов, оно заменит предыдущий объект, который существовал для этого ключа ранее.

.

Комментарии:

1. Спасибо за ваш ответ @Chris Williams, управление версиями объекта не включено, однако простой upload_file, похоже, не заменяет предыдущий объект, когда новое загружаемое имя файла отличается.

2. Вы на 100% уверены, что ключ тот же самый? И работает ли это для новых объектов?