Скопируйте файлы между s3 Buckets с целевым контейнером, имеющим каталог - PullRequest
0 голосов
/ 25 июня 2019

У меня есть два ведра s3. Я хочу скопировать файл из Bucket from в Bucket to. В Bucket to у меня есть папка /copy_here. Когда я попытался напрямую скопировать содержимое между корзинами с помощью Boto, это работает. Но когда я хочу скопировать это в каталог в месте назначения, я получаю ParameterValidationError. Вот код, который я пытался выполнить:

def copyToBucket(fromBucket, toBucket, fileName):
    copySource = {
        'Bucket': readBucketName,
        'Key': fileName
    }
    uploadBucket = s3.Bucket(uploadBucketName)
    uploadBucket.copy(copySource, fileName) 

Я посмотрел на мета-клиент s3, который также предлагает те же функции. Я не уверен, что эта операция возможна за один шаг. Если есть, это было бы здорово. Если нет, следует ли сначала скопировать в целевую корзину и переместить мой файл в папку copy_here? В настоящее время мой uploadBucketName установлен на to/copy_here.

1 Ответ

1 голос
/ 26 июня 2019

Папки и каталоги не существуют в Amazon S3.Вместо этого имя файла (Key) объекта состоит из полного пути плюс имя файла .(Ну, консоль управления S3 заставляет показывать , что есть папки, но они на самом деле не существуют.)

Итак, это скопирует файл по вашему желанию:

import boto3

copySource = {
    'Bucket': 'source-bucket-name',
    'Key': 'foo.txt'
}
uploadBucket = s3.Bucket('destination-bucket-name')
uploadBucket.copy(copySource, 'copy_here/foo.txt') 

Обратите внимание, что пункт назначения Key состоит из пути + имени файла.Имя корзины должно состоять только из самого имени корзины.

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