删除S3上不同文件夹中具有相同名称的所有文件

时间:2018-12-05 11:14:40

标签: ruby-on-rails amazon-web-services amazon-s3

我正在使用aws-sdk-ruby gem。使用S3,CloudFront和Lambda。

在S3中,我正在将文件上传到根目录中,例如tshirt1.jpg。当我的Lambda函数运行时,它会创建此文件的不同大小并将其放入如下结构:

100x100/ 
  --> webp/tshirt1.jpg
  --> jpg/tshirt1.jpg
500x500
  -->webp/tshirt1.jpg
  -->jpg/tshirt1.jpg
tshirt1.jpg

其中100x100是新图像尺寸,下一个文件夹是类型。

我知道我要删除的文件名,但是,有一种方法可以找到该名称的任何文件夹中存储桶中的所有文件并将其删除。

def delete_resource
  s3 = Aws::S3::Resource.new
  bucket = s3.bucket(settings.aws.bucket)
  bucket.delete_objects({
    delete:{
     objects: [
      {key: 'tshirt1.jpg'}
     ]
    }
   })
end

如果可能的话,我想做点什么 {key: '*/*/tshirt1.jpg'}

这是否可行,或者我是否必须传递所有可能的文件夹路径?

2 个答案:

答案 0 :(得分:0)

@Greyhounddad S3不维护文件层次结构,而是将所有内容都视为对象,并且获取对象的唯一方法是通过其键,

如果要自动执行删除其他目录中文件的过程,请尝试使用aws lambda,您可以在删除某个存储桶中的文件时执行lambda函数,并且lambda将从其他存储桶中删除具有相同名称的其他文件,或者在您的情况下目录。

让我知道它是否有帮助

答案 1 :(得分:0)

没有内置功能可以做到这一点。

您将需要编写一个专门执行此操作的程序。