unable to delete file from amazon s3 using ruby sc

2019-04-14 05:44发布

问题:

I am using aws-sdk-ruby for deleting a file saved in a bucket in my amazon s3 account, but i can't figure out why i am able to delete the desired file from S3 bucket using the following code.

this is my code

require 'aws-sdk-v1'
require 'aws-sdk'

ENV['AWS_ACCESS_KEY_ID'] = "XXXXXXX"
ENV["AWS_SECRET_ACCESS_KEY"] = '/ZZZZZZZZ'
ENV['AWS_REGION'] = 'us-east-1'


s3 = Aws::S3::Resource.new
bucket = s3.bucket('some-bucket')
obj = bucket.object('https://s3.amazonaws.com/some-bucket/38ac8226-fa72-4aee-8c3d-a34a1db77b91/some_image.jpg')
obj.delete

回答1:

Looking at the documentation IMO it should look like the this:

bucket = s3.buckets['some-bucket']
obj = bucket.objects['38ac8226-fa72-4aee-8c3d-a34a1db77b91/some_image.jpg']
obj.delete

Note the square brackets and that the object's key doesn't include the domain and instead of creating an instance of Aws::S3::Resource create an instance of AWS::S3



回答2:

it should be:

objs = bucket.objects('https://s3.amazonaws.com/some-bucket/38ac8226-fa72-4aee-8c3d-a34a1db77b91/some_image.jpg')
objs.each {|obj| obj.delete}


回答3:

With the aws-sdk v2: I had to do this: (see Doc)

$s3.bucket("my-bucket").objects(prefix: 'my_folder/').batch_delete!

(delete is deprecated in favor of batch_delete)

Useful post: https://ruby.awsblog.com/post/Tx1H87IVGVUMIB5/Using-Resources