【发布时间】:2015-09-04 04:46:48
【问题描述】:
有没有一种方法可以在 S3 存储桶中完成上传时收到通知?要求是我需要在桶中上传视频完成后向用户提供链接。默认情况下,我会在视频开始 30 分钟后提供链接,无论视频上传需要 5 分钟还是 40 分钟。那么有没有像 API 一样提供上传完成信息的方法呢?
【问题讨论】:
标签: amazon-web-services amazon-s3
有没有一种方法可以在 S3 存储桶中完成上传时收到通知?要求是我需要在桶中上传视频完成后向用户提供链接。默认情况下,我会在视频开始 30 分钟后提供链接,无论视频上传需要 5 分钟还是 40 分钟。那么有没有像 API 一样提供上传完成信息的方法呢?
【问题讨论】:
标签: amazon-web-services amazon-s3
当发生以下任何情况时,可以在 Amazon S3 中触发通知:
s3:ObjectCreated:*s3:ObjectCreated:Puts3:ObjectCreated:Posts3:ObjectCreated:Copys3:ObjectCreated:CompleteMultipartUploads3:ObjectRemoved:*s3:ObjectRemoved:Deletes3:ObjectRemoved:DeleteMarkerCreateds3:ReducedRedundancyLostObject通知可以通过三个目的地发送:
见:Configuring Amazon S3 Event Notifications
最合适的选择取决于您的编程偏好和应用的编写方式:
一旦触发,您的代码将需要识别谁上传了视频,检索他们的用户详细信息,然后向他们发送电子邮件通知。如果您控制正在上传的对象的密钥(文件名),这将是最简单的,因为这将有助于确定要通知的用户。
【讨论】:
当文件上传到 S3 时,您可以使用 Amazon Lambda 向 Amazon SNS 发布消息(或以任何其他方式通知您)。
为您的 Lambda 函数设置 S3 触发器。看这个教程:http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-s3-events-adminuser.html
在您的 Lambda 函数中,发送您的通知。您可以使用 SNS、SES、SQS 等。
【讨论】:
在 S3 存储桶中没有直接的方法可以判断上传是否完成。你可以做一件我经过大量研究后遵循的简单的事情,它工作正常。
按照此link 并根据您的要求每 30 秒左右读取一次文件的大小,当两个同时读取的文件大小没有改变时再次检查大小是否有保证,因为这可能是由于网络拥塞对于两个同时读数,该尺寸可能没有改变。
【讨论】: