Сохранение изображения в AWS DynamoDB из веб приложения

Как можно сохранить изображение отправленное пользователем через веб приложение в базу данных AWS DynamoDB

Вот форма для получения изображения

    <div>
        <input type="file" id="fileInput" accept="image/*" />
        <img id="image" scr="" />
    </div>
    <button>Input Image</button>
    <div id="results"></div>

Ответы (1 шт):

Автор решения: taykwn

Вы можете хранить ссылки на изображения в DynamoDB, а сами изображения сохранять в Amazon S3.

Вот пример lambda function на python

def lambda_handler(event, context):
    # Парсинг изображения из запроса
    image_data = json.loads(event['body'])
    image_bytes = base64.b64decode(image_data['image'])

    # Инициализация клиентов
    dynamodb = boto3.resource('dynamodb')
    s3_client = boto3.client('s3')

    # Загрузка изображения в S3
    bucket_name = 'your bucket' 
    object_key = f'images/{image_id}.jpg'
    s3_client.put_object(Bucket=bucket_name, Key=object_key, Body=image_bytes, ContentType='image/jpeg')

    # Сохранение данных в DynamoDB
    table = dynamodb.Table('Table name')
    table.put_item(
        Item={
            'S3Key': object_key  # Сохраняем ссылку на файл в S3
        }
    )

    return {
        'statusCode': 200,
        'body': json.dumps({
            'imageS3Url': f'https://{bucket_name}.s3.amazonaws.com/{object_key}'  # URL до изображения в S3
        }),
        'headers': {
            'Content-Type': 'application/json',
        }
    }

Так же добавьте функцию JS для отправки изображения в AWS

<button onclick="uploadImage()">Analyze Image</button>  <!-- добавлен onclick="uploadImage()"  -->
        function uploadImage() {
            var fileInput = document.getElementById('fileInput');
            var file = fileInput.files[0];
            var reader = new FileReader();

            reader.onload = function (e) {
                var base64Image = e.target.result.split('base64,')[1];

                fetch(' YOUR API GATEWAY', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify({ image: base64Image })
                })
            };

            reader.readAsDataURL(file);
        }

Вам так же необходимо добавить к вашей Lambda function триггер API Gateway и настроить его.

→ Ссылка