Запись в s3 с использованием imageio и boto3

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

s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket)
obj = bucket.Object(filepath+'/'+second+'.jpg')
img.imwrite(obj)

Если бы я записал это в локальное местоположение, а затем записал его в s3, то это сработало бы, но есть ли лучший способ, где я мог бы сохранить его в s3 без необходимости записывать его локально.

Любая помощь приветствуется.

1 ответ

Решение

Вы можете использовать что-то вроде BytesIO из пакета Python io, чтобы создать объект файла в памяти и передать его клиенту boto3, например так:

from io import BytesIO

s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket)
in_memory_file = BytesIO()
img.imwrite(in_memory_file)
obj = bucket.Object(filepath+'/'+second+'.jpg')
obj.upload_fileobj(in_memory_file)

Это должно решить проблему без необходимости записи файла на диск.

Другие вопросы по тегам