【问题标题】:Get Notified when upload is completed in Amazon S3 bucket在 Amazon S3 存储桶中完成上传时获取通知
【发布时间】:2015-09-04 04:46:48
【问题描述】:

有没有一种方法可以在 S3 存储桶中完成上传时收到通知?要求是我需要在桶中上传视频完成后向用户提供链接。默认情况下,我会在视频开始 30 分钟后提供链接,无论视频上传需要 5 分钟还是 40 分钟。那么有没有像 API 一样提供上传完成信息的方法呢?

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    当发生以下任何情况时,可以在 Amazon S3 中触发通知:

    • s3:ObjectCreated:*
    • s3:ObjectCreated:Put
    • s3:ObjectCreated:Post
    • s3:ObjectCreated:Copy
    • s3:ObjectCreated:CompleteMultipartUpload
    • s3:ObjectRemoved:*
    • s3:ObjectRemoved:Delete
    • s3:ObjectRemoved:DeleteMarkerCreated
    • s3:ReducedRedundancyLostObject

    通知可以通过三个目的地发送:

    • Amazon Simple Notification Service (SNS),进而可以通过电子邮件、HTTP/S 端点、SMS、移动推送通知发送通知
    • 亚马逊简单排队服务 (SQS)
    • Amazon Lambda(目前并非在所有地区都可用)

    见:Configuring Amazon S3 Event Notifications

    最合适的选择取决于您的编程偏好和应用的编写方式:

    • 使用 SNS 推送到 HTTP 端点以触发应用中的某些代码
    • 编写一些代码来定期检查 SQS 队列
    • 在 Node.js 或 Java 中编写 Lambda 函数

    一旦触发,您的代码将需要识别谁上传了视频,检索他们的用户详细信息,然后向他们发送电子邮件通知。如果您控制正在上传的对象的密钥(文件名),这将是最简单的,因为这将有助于确定要通知的用户。

    【讨论】:

      【解决方案2】:

      当文件上传到 S3 时,您可以使用 Amazon Lambda 向 Amazon SNS 发布消息(或以任何其他方式通知您)。

      1. 为您的 Lambda 函数设置 S3 触发器。看这个教程:http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-s3-events-adminuser.html

      2. 在您的 Lambda 函数中,发送您的通知。您可以使用 SNS、SES、SQS 等。

      【讨论】:

      • 我可以检测到正在上传新文件,但我希望在上传完成但尚未开始时收到通知。
      • S3 通知不能直接发送到 SNS 而不必经过 Lambda 吗?
      • @asusgates 文件上传完成后会触发 Lambda。
      • @mbaird 你是对的。 S3 到 SNS 通知:docs.aws.amazon.com/AmazonS3/latest/dev/…
      【解决方案3】:

      在 S3 存储桶中没有直接的方法可以判断上传是否完成。你可以做一件我经过大量研究后遵循的简单的事情,它工作正常。

      按照此link 并根据您的要求每 30 秒左右读取一次文件的大小,当两个同时读取的文件大小没有改变时再次检查大小是否有保证,因为这可能是由于网络拥塞对于两个同时读数,该尺寸可能没有改变。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-12
        • 2015-10-28
        • 1970-01-01
        • 2015-05-05
        • 2016-08-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多