Получить оригинальное имя файла в лямбде из s3 уведомления в python - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть корзина s3, где я храню файлы. В связи с этим у меня есть уведомление, которое запускает лямбду.

Чего я хочу достичь

Когда лямбда срабатывает, я хочу получить доступ в основном к 3 вещам.

  1. исходное имя файла
  2. размер файла
  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"
 }
...