2

我目前在 S3 中有两个存储桶 - 我们称它们photosphotos-thumbnails. 现在,当用户从我们的 iOS 应用上传图片时,我们直接将该照片上传到存储photos桶中,这会触发 lambda 函数将照片调整为缩略图并将缩略图上传到photos-thumbnails存储桶中。

我现在想在原始存储桶 ( )photos中创建缩略图之前对存储桶中的图像进行一些图像压缩。photos但是,如果我将压缩 lambda 函数设置为在存储桶中创建对象时触发photos,它将最终陷入用户上传原始照片、触发压缩并放回同一个存储桶的永无止境的循环中,再次触发压缩等。

有没有办法在它成为图像压缩的递归调用之前拦截它?或者是创建第三个存储桶的唯一方法?

4

3 回答 3

2

第三个桶可能是最好的。如果你真的想使用同一个桶,只需选择一些标准来控制是否photos应该修改图像(可能是图像文件大小或其他东西),然后确保已经处理过的图像低于阈值。lambda 仍然会运行两次,但第二次它会检查图像并发现它已经被处理过,因此不再处理它。据我所知,没有办法抑制 lambda 的第二次运行。

另一种选择可能是根据对象的创建方式进行过滤。在 S3 中可以使用以下事件类型。将一个用于您的用户上传的内容(可能是 POST?),另一个用于您的 lambda 的作用(可能是 PUT?)

  • s3:ObjectCreated:Put
  • s3:ObjectCreated:发布
  • s3:ObjectCreated:复制
  • s3:ObjectCreated:CompleteMultipartUpload
于 2015-03-20T19:31:20.717 回答
0

第三个存储桶可以工作,或者本质上是相同的,在压缩后用前缀重命名文件,然后在重新处理文件之前检查该前缀。

于 2015-03-20T21:38:35.447 回答
0

如果您以可预测的方式命名函数的输出,则只需过滤函数在函数开始时创建的任何文件。

但是,如前所述,使用不同的存储桶作为输出会更简单。

于 2015-07-09T07:53:47.483 回答