Ошибка OSE: не удается определить файл изображения <объект _io.BytesIO по адресу 0x00000198001B9E08> при попытке получить изображения из s3 и открыть изображение - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь получить JPEG.из ведра s3 но я получаю ошибку.Вот часть кода:

s3_client = boto3.client('s3')
bucket = os.environ['encryption_bucket']

def encrypt_zip(event, contex):
    image_key = event['keys']
    response = s3_client.get_object(Bucket= bucket, Key=image_key)
    if response['ResponseMetadata']['HTTPStatusCode'] == 200:
        object_data = response['Body']._raw_stream.data
        print(type(object_data))
        image = Image.open(io.BytesIO(object_data))

ошибка:

OSError: cannot identify image file <_io.BytesIO object at 0x00000198001B9E08>

второй вопрос: попробуйте загрузить объект из корзины s3 и сохранить это изображение

if 's3' in event['Records'][0]:
    s3  = event['Records'][0]['s3']
    image_key  = s3['object']['key']
    key_split = str(image_key).split('/')
    job_key = "-".join(key_split)
    bucket = s3['bucket']['name']
    with open(job_key, 'wb') as data:
         client.download_fileobj(bucket, image_key, data)
         set_log("logo image loaded successfully....", False)
    image_path = '/tmp/' + job_key
    image = Image.open(job_key)
    image.save(image_path)

ERROR : OSError: cannot identify image file '8093-C8FE-2403-490B-9050e99b-53a9-4e2f-b9af-9910d5fc9a0f.jpg'

и загрузка изображения в локальном.он не может быть загружен. введите описание изображения здесь

1 Ответ

0 голосов
/ 06 декабря 2018

Основываясь на других ваших вопросах (так как вы удалили?), Ваши требования:

  • Массив имен файлов передается в функцию
  • Преобразование / в -чтобы упростить имя файла
  • Вы хотите создать zip-файл с этими файлами

Следовательно, это будет что-то вроде:

import boto3
import zipfile

s3_client = boto3.client('s3')
bucket = os.environ['encryption_bucket']

def encrypt_zip(event, context):
    key_array = [key.replace('/', '-') for key in event['keys']]

    # Download objects
    for key in key_array:
        response = s3_client.download_file(bucket, key, '/tmp/' + key)

    # Zip objects
    with ZipFile('/tmp/foo.zip', 'w') as myzip:
        for key in key_array:
            myzip.write('/tmp/' + key)
        myzip.close()

    # Put zip file in S3
    s3_client.upload_file('/tmp/foo.zip', bucket, 'foo.zip')

(у меня нет 'Я проверил это, и я просто скопировал код Zipfile из документации , поэтому я не уверен, что это правильно.)

Я также не уверен, что вы пытаетесьделать с вещами / и -, потому что это зависит от списка передаваемых ключей и от того, какие объекты называются в S3.

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