AFAIK,AWS S3上的对象名称始终区分大小写,并且不可能将AWS S3配置为不区分大小写。
那么,是否可以配置AWS Lambda之类的东西,以将上传的文件名规范化为小写?或使用AWS S3执行此任务的最佳实践是什么?
答案 0 :(得分:2)
是的,这可以通过让Lambda函数订阅您的S3 PUT事件来轻松完成。
{
"Records": [
{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": bucketarn,
"name": "sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}
]
}
然后,您可以获取event.Records [0] .s3.bucket.name和event.Records [0] .s3.object.key来向AWS发起copyObject请求
文件复制成功后,您就可以delete原始文件了。
只需确保仅将Lambda配置为用于PUT事件,因为如果将其设置为ALL事件,则COPY和DELETE也会触发您的函数,从而使您可以进行无限递归。