Ошибка изображения, не загружается для поиска изображения S3 - PullRequest
0 голосов
/ 12 апреля 2020

Я написал код на своем бэкэнде (размещенном на Elasti c Beanstalk), чтобы извлечь файл из корзины S3 и сохранить его обратно в корзину под другим именем. Я использую boto3 и создал клиента s3 с именем 's3'.

bucketname - это имя корзины, keyname - это имя ключа. Я также использую модуль tempfile

tmp = tempfile.NamedTemporaryFile()
with open(tmp.name, 'wb') as f:
    s3.download_fileobj(bucketname, keyname, f)    
s3.upload_file(tmp, bucketname, 'fake.jpg')

Мне было интересно, было ли мое понимание выключено (все еще отлаживаю причину ошибки) - я создал tempfile, открыл и сохранил в нем содержимое объекта с keyname и bucketname. Затем я загрузил этот временный файл в корзину под другим именем. Правильно ли мои рассуждения?

1 Ответ

1 голос
/ 12 апреля 2020

Команда upload_file() ожидает имя файла (как string) в первом параметре, не a file объект.

Вместо этого следует использовать upload_fileobj().

Однако я бы порекомендовал что-то другое ...

Если вы просто сделаете sh до копию объекта , вы можете использовать copy_object:

response = client.copy_object(
    Bucket='destinationbucket',
    CopySource='/sourcebucket/HappyFace.jpg',
    Key='HappyFaceCopy.jpg',
)
...