Запись в 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)
Это должно решить проблему без необходимости записи файла на диск.