如何从Amazon S3删除对象?

时间:2015-11-02 16:20:29

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

我想使用aws-sdk从我的S3存储桶中删除文件但到目前为止没有运气... AWS S3 delete_object方法返回DeleteObjectOutput结构全部 nil属性:

#<struct Aws::S3::Types::DeleteObjectOutput delete_marker=nil, version_id=nil, request_charged=nil>

但后来当我检查我的存储桶中的文件夹目录时,我发现文件仍然存在。

代码如下。

的Gemfile

gem 'aws-sdk', '~> 2'

配置/初始化/ AWS-sdk.rb

Aws.config.update({
    region: 'us-west-2',
    credentials: Aws::Credentials.new(
      ENV['AWS_ACCESS_KEY_ID'], 
      ENV['AWS_SECRET_ACCESS_KEY'])
})

my_controller.rb

s3 = Aws::S3::Client.new
response = s3.delete_object({
    bucket: ENV['S3_BUCKET_NAME'],
    key: params[:attachment_url]
})
# response == <struct Aws::S3::Types::DeleteObjectOutput delete_marker=nil, version_id=nil, request_charged=nil>

1 个答案:

答案 0 :(得分:0)

好吧,我的密钥不是直接指向文件,而是直接指向包含该文件的文件夹。如你所见,我在文件名中有斜杠来区分文件夹。

key = 'one/two/three/file.png'

但是对于我不知道的原因,这些斜杠(在文件上传到S3时)被替换为带有%2F个字符的S3。

要删除文件以便成功完成工作,我需要将%2F转换回&#39; /&#39;在将密钥传递给delete_object方法之前。干杯:)

=======

但是从亚马逊那里还没有回复任何关于删除成功与否的消息仍然不好......