У меня есть корзина s3, где я храню файлы. В связи с этим у меня есть уведомление, которое запускает лямбду.
Чего я хочу достичь
Когда лямбда срабатывает, я хочу получить доступ в основном к 3 вещам.
- исходное имя файла
- размер файла
- тип файла
Затем я хочу сохранить это в DynamoDb. Я не хочу, чтобы исходное имя файла было в файле, но должно быть сохранено в DynamoDb.
Код, который у меня сейчас есть
Здесь я создаю предопределенный URL
try:
response = s3_client.generate_presigned_url(operation,
Params={
"Bucket": "BUCKET_NAME"),
"Key": f"{containerId}/{fileId}" # This comes from input params from the GET method for achieving the url
},
ExpiresIn=expiration)
except ClientError as e:
logging.error('Could not generate presigned url: ' + str(e))
return None
# The response contains the presigned URL
return response
Должен ли я каким-то образом передать имя файла в предварительно указанном URL-адресе?
А затем в лямбде, который запускается из уведомления, я пытаюсь получить доступ к данным сома из файла, который был загружен, но безуспешно.
s3 = boto3.client('s3')
records = event.get('Records')
record = records[0]
jsonObject = record.get('object')
key = jsonObject.get('key')
splittedKey = key.split('/')
# I want to extract the containerId and fileId because I need it to access the row in dynamo
containerId = splittedKey[0]
fileId = splittedKey[1]
bucket = record.get('s3').get('bucket').get('name')
metaData= s3.head_object(Bucket=bucket, Key=key) #No info about the original filename here
Затем я хочу сохранить объект в динамо с этими столбцами
{
"filename": "some_file_name"
"filetype": "some_file_type_.jpg_etc"
"filesize_kb": "1000"
}