Сохранение изображения в 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 и настроить его.