Python Boto3 Lambda Загрузить временный файл - PullRequest
0 голосов
/ 21 ноября 2018

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

module initialization error: expected string or bytes-like object

Вот код для загрузки:

s3 = boto3.client('s3')
s3.upload_file(filename,my_bucket,basename)

Здесьжурналы одной из тестовых загрузок:

Getting ready to download Giggidy.png
This is what we're calling our temp file: /tmp/tmp6i7fvb6z.png
Let's compress /tmp/tmp6i7fvb6z.png
Compressed /tmp/tmp6i7fvb6z.png to /tmp/tmpmq23jj5c.png
Getting ready to upload /tmp/tmpmq23jj5c.png
File to Upload, filename: /tmp/tmpmq23jj5c.png
Mime Type: image/png
Name in Bucket, basename: tmpmq23jj5c.png
START RequestId: e9062ca9-ed2c-11e9-99ee-e3a40680ga9d Version: $LATEST
module initialization error: expected string or bytes-like object
END RequestId: e9062ca9-ed2c-11e9-99ee-e3a40680ga9d

Как я могу загрузить файл в контексте лямбды?

ОБНОВЛЕНИЕ: я загрузил свой код в суть дляобзор: https://gist.github.com/kjenney/068531ffe01e14bb7a2351dc55592551

Я также переместил соединение с клиентом boto3 в своем скрипте, думая, что, возможно, прерывает загрузку, но я все еще получаю ту же ошибку в том же порядке.'process' - это моя функция-обработчик.

1 Ответ

0 голосов
/ 22 ноября 2018

Ваша проблема в этой строке:

client.upload_file(filename,my_bucket,basename)

Из документации формат:

client.upload_file('/tmp/hello.txt', 'mybucket', 'hello.txt')

Обратите внимание, что имя сегмента представляет собой строку .Вот почему ошибка говорит ожидаемая строка .

Однако ваш код устанавливает my_bucket как:

my_bucket = s3.Bucket(bucket)

Вам следует использовать имя из ведра, а не из ведра объект .

...