我希望允许多个客户端将文件上传到S3存储桶(或存储桶)。 S3创建事件将触发将向SNS主题添加消息的通知。这有效,但我在确定如何识别哪个客户端上传文件时遇到问题。我可以通过明确检查上传文件的子文件夹/ S3名称来实现此功能,但我更愿意自动将客户端标识符添加为SNS消息的属性。
这可能吗?我的另一个想法是使用Lambda函数作为中间人来添加属性并将其传递给SNS主题,但是如果可能的话,我还想在没有Lambda函数的情况下这样做。
答案 0 :(得分:5)
从S3发送到SNS的Event Message Structure包含一个字段:
"userIdentity":{
"principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event"
},
但是,这还取决于上传对象时使用的凭据:
(我没有测试上述所有情况,所以请测试它们以确认 Amazon-customer-of-the-user-who-cause-the-event 的定义。)
如果您的目标是在邮件中添加您自己的客户端标识符,那么最好的方法是:
答案 1 :(得分:0)
您可以在上传文件之前将用户定义的元数据添加到文件中:
private final static String CLIENT_ID = "client-id";
ObjectMetadata meta = new ObjectMetadata();
meta.addUserMetadata(CLIENT_ID, "testid");
s3Client.putObject(<bucket>, <objectKey>, <inputstream of the file>, meta);
然后下载S3文件时:
ObjectMetadata meta = s3Client.getObjectMetadata(<bucket>, <objectKey>);
String clientId = meta.getUserMetaDataOf(CLIENT_ID);
希望这就是你要找的东西。