使用aws-sdk gem删除亚马逊S3上的“文件夹”

7

我可以使用以下方法在Amazon S3上删除“文件夹”中的个别文件:

s3 = AWS::S3.new(:access_key_id => ENV['AWS_ACCESS_KEY_ID'], :secret_access_key => ENV['AWS_ACCESS_KEY'])
folder_path = 'uploads/'+@image.s3_filename
s3.buckets[ENV['AWS_BUCKET']].objects.with_prefix(folder_path).delete_all

但是这样会留下一个空文件夹。怎样才能完全删除文件夹(文件夹路径)?
3个回答

22

这是一个老问题,但你可以在aws-sdk 2.0中做到这一点。

s3 = Aws::S3::Resource.new
folder = 'path/to/the/folder'
objects = s3.bucket(ENV['S3_BUCKET_NAME']).objects({prefix: folder})
objects.batch_delete!

delete已经被弃用了。

希望这可以帮到你!


1
这应该是一个被接受的答案。感谢@Jeremie,为我节省了一些时间。 - Vladimir Tagai
是的,这是正确的做法。 - Nuno Silva

6

S3上的所有内容都是一个可以通过“键”进行操作的对象。如果您只是简单地获取它,那么您可以对其调用delete

s3.buckets[ENV['AWS_BUCKET']].objects["name of the folder"].delete

谢谢你的帮助,但是这对我似乎没有用。我尝试传递文件夹的名称(“test”)和存储桶中文件夹的路径(“uploads/test”),但都没有起作用。 - scientiffic
当我尝试运行代码时,没有出现错误,但它什么也没做。 - scientiffic
你尝试过在其中删除所有对象后再试吗? - DiegoSalazar
是的,我可以删除文件夹内的所有对象,只是无法删除文件夹本身(正如原帖中所解释的那样)。 - scientiffic
1
我的错误,看起来我最初发布的代码实际上是在删除文件夹!只是s3控制台没有刷新。 - scientiffic

1
你必须删除文件夹中的所有文件,然后才能删除该文件夹。

不需要了。请参考@Jeremie的回答。 - Nuno Silva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接