文件上传到OSS触发函数执行多次,要如何处理?

将文件上传到OSS后发现OSS触发器被多次触发,您需要查看OSS触发器设置的触发事件是否符合预期。

问题原因

OSS触发器被多次触发,可能原因是设置的触发规则中包含通配符,因此单个文件上传过程中产生的多个事件均匹配成功,导致触发了多次函数执行。

例如,您通过分片上传功能上传文件到OSS,这个过程会依次触发oss:ObjectCreated:InitiateMultipartUploadoss:ObjectCreated:UploadPartoss:ObjectCreated:CompleteMultipartUpload事件。假如您将OSS触发器的触发事件设置为oss:ObjectCreated:*,通过OSS Browser工具上传一个12 MB的文件,分片大小设置为5 MB,那么您的函数将被触发执行5次。5次触发的事件分别为:

  • oss:ObjectCreated:InitiateMultipartUpload

  • oss:ObjectCreated:UploadPart

  • oss:ObjectCreated:UploadPart

  • oss:ObjectCreated:UploadPart

  • oss:ObjectCreated:CompleteMultipartUpload

所以对于分片上传,触发事件需要设置为oss:ObjectCreated:CompleteMultipartUpload才只会被触发一次。

解决方案

去除匹配规则中的通配符,精确添加所需的事件类型。例如,您可以设置触发器的触发事件oss:ObjectCreated:PutObjectoss:ObjectCreated:PostObjectoss:ObjectCreated:CompleteMultipartUpload。这三个触发事件覆盖通过以下方式上传文件的情况:

  • oss:ObjectCreated:PutObject:通过简单上传创建或覆盖文件。

  • oss:ObjectCreated:PostObject:通过表单上传创建或覆盖文件。

  • oss:ObjectCreated:CompleteMultipartUpload:完成分片上传。