OSS支持的事件通知功能,能够对您所关心的OSS资源上的相关操作及时进行消息通知。例如:

  • 有新数据从图片内容分享平台、音视频平台上传到OSS。
  • OSS上的相关内容发生了更新。
  • OSS上的重要文件被删除。
  • OSS上数据同步已经完成。

OSS事件通知是异步进行的,不影响正常的OSS操作。事件通知的配置包括规则消息通知两部分。

  • 规则:用来描述什么情况下需要OSS进行消息通知。
  • 消息通知:基于阿里云消息服务MNS实现,提供多种通知方式。

OSS事件通知整体架构如下图:



创建方法

  1. 进入OSS 管理控制台界面。
  2. 在左侧存储空间列表中,单击目标存储空间名称,打开该存储空间概览页面。
  3. 单击事件通知页签,然后单击创建规则,打开创建规则页面。


  4. 规则名称框中,输入规则名称。
    说明
    • 您在同地区下的同产品中最多可以创建10条规则,新规则约10分钟后生效。
    • 任意两个规则不能有交集,单条规则任意两个资源描述不能有交集。
  5. 事件类型下拉列表中,选择一个或多个需要进行消息通知的事件。
    说明
    • 事件类型对应OSS资源的不同操作,具体类型和含义请参见下文中的事件类型列表。
    • 选择您想要触发通知的事件,可以选择多个。同样的事件不可以多次配置在同一资源上。
  6. 资源描述 区域,单击添加,添加一个或多个资源描述。
    说明
    • 资源描述:可以是全名、前缀、后缀以及前后缀,不同资源描述不能有交集。
      • 全名:输入某个Object的全名可以精确关注到此Object。
      • 前后缀:设置Object的前后缀可以关注一个Bucket中的全部或者部分Object。例如对于名为nightbucket的Bucket:
        • 要关注其中所有的文件,则前缀、后缀都不填。
        • 要关注其中目录movie下的所有文件,则前缀填 movie/,后缀不填。
        • 要关注其中所有的.jpg的图片,则前缀不填,后缀填 .jpg
        • 要关注其中目录movie下的.mp3格式的影片,则前缀填 movie/,后缀填 .mp3
    • OSS资源包括Bucket和Object,通过“/”连接。以Bucket(movie)和Object(hello.avi)为例。
      • 全名:movie/hello.avi;
      • 前后缀:前movie/,后.avi,表示movie中所有以.avi为后缀的Object。
  7. 接收终端区域,单击添加,添加一个或多个接收终端。
    说明
    • OSS事件通知功能在某个操作规则匹配之后,会生成相关消息描述,并将该消息发布到MNS的Topic中,然后根据该Topic上的订阅,将消息推送到具体的接收终端上。
    • 对于如何处理MNS的Http推送消息以及从队列中消费消息,请参见消息服务产品概述
    • 阿里云消息服务MNS是收费服务,计费详情请参见消息服务详细价格信息

事件类型列表

事件类型 含义
ObjectCreated:PutObject 创建/覆盖文件:简单上传
ObjectCreated:PostObject 创建/覆盖文件:表单上传
ObjectCreated:CopyObject 创建/覆盖文件:拷贝文件
ObjectCreated:InitiateMultipartUpload 创建/覆盖文件:初始化一个分片上传任务
ObjectCreated:UploadPart 创建/覆盖文件:上传分片
ObjectCreated:UploadPartCopy 创建/覆盖文件:从一个已存在的文件中拷贝数据来上传一个分片
ObjectCreated:CompleteMultipartUpload 创建/覆盖文件:完成分片上传
ObjectCreated:AppendObject 创建/覆盖文件:追加上传
ObjectDownloaded:GetObject 下载文件:简单下载
ObjectRemoved:DeleteObject 删除文件:一个
ObjectRemoved:DeleteObjects 删除文件:多个
ObjectReplication:ObjectCreated 同步文件:已生成
ObjectReplication:ObjectRemoved 同步文件:已删除
ObjectReplication:ObjectModified 同步文件:已修改

事件通知消息格式

OSS的事件通知消息内容是经过Base64编码的,解码后是Json格式,具体内容如下:
{"events": [{
    "eventName": "",  //事件通知类型
    "eventSource": "", //消息源,固定为"acs:oss"
    "eventTime": "", //事件时间,格式为ISO-8601
    "eventVersion": "", //版本号,目前为"1.0"
    "oss": {
        "bucket": {
            "arn": "", //bucket的唯一标识符,格式为"acs:oss:region:uid:bucket"
            "name": "", //bucket名称
            "ownerIdentity": ""}, //bucket的owner
        "object": {
            "deltaSize": , //object大小的变化量,比如新增一个文件,这个值就是文件大小,如果是覆盖一个文件,这个值就是新文件与旧文件的差值,因此可能为负数
            "eTag": "", //object的etag,与GetObject()请求返回的ETag头的内容相同
            "key": "", //object名称
            "position":, //可变项,只有在ObjectCreated:AppendObject事件中才有,表示此次请求开始append的位置,注意是从0开始
            "readFrom": , //可变项,只有在ObjectDownloaded:GetObject事件中才有,表示文件开始读取的位置,如果不是Range请求,则此项为0,否则则是Range请求的开始字节,注意是从0开始
            "readTo": , //可变项,只有在ObjectDownloaded:GetObject事件中才有,表示文件最后读取的位置,如果不是Range请求,则此项为文件的大小,否则则是Range请求的结束字节增1
            "size": }, //object大小
        "ossSchemaVersion": "", //此字段域的版本号,目前为"1.0"
        "ruleId": "GetObject"}, //此事件匹配的规则ID
        "region": "", //bucket所在的region
        "requestParameters": {
            "sourceIPAddress": ""}, //请求的源IP
        "responseElements": {
            "requestId": ""}, //请求对应的requestid
        "userIdentity": {
            "principalId": ""}, //请求发起者的uid
        "xVars": {  //oss的callback功能中的自定义参数
            "x:callback-var1":"value1",
            "x:vallback-var2":"value2"}}]}
示例:
{"events": [{
    "eventName": "ObjectDownloaded:GetObject",
    "eventSource": "acs:oss",
    "eventTime": "2016-07-01T11:17:30.000Z",
    "eventVersion": "1.0",
    "oss": {
        "bucket": {
            "arn": "acs:oss:cn-shenzhen:1148930107246818:event-notification-test-shenzhen",
            "name": "event-notification-test-shenzhen",
            "ownerIdentity": "1148930107246818"},
        "object": {
            "deltaSize": 0,
            "eTag": "0CC175B9C0F1B6A831C399E269772661",
            "key": "test",
            "readFrom": 0,
            "readTo": 1,
            "size": 1},
        "ossSchemaVersion": "1.0",
        "ruleId": "GetObjectRule"},
        "region": "cn-shenzhen",
        "requestParameters": {
            "sourceIPAddress": "140.205.128.90"},
        "responseElements": {
            "requestId": "5776514AF09A9E6542425D2B"},
        "userIdentity": {
            "principalId": "1148930107246818"},
        "xVars": {
            "x:callback-var1":"value1",
            "x:vallback-var2":"value2"}}]}