将ACL设置为public_read,将文件上载到AWS S3

时间:2015-02-18 18:58:02

标签: ruby-on-rails ruby amazon-s3 acl aws-sdk

在我的Rails应用程序中,我在创建时将客户RMA运输标签保存到S3存储桶。我刚刚更新到aws-sdk gem的V2,现在我设置ACL的代码不起作用。

在V1.X中运行的代码:

  # Saves label to S3 bucket
  s3 = AWS::S3.new
  obj = s3.buckets[ENV['S3_BUCKET_NAME']].objects["#{shippinglabel_filename}"]
  obj.write(open(label.label('pdf').postage_label.label_pdf_url, 'rb'), :acl => :public_read)

.write似乎已弃用,所以我现在正在使用.put。一切正常,除非我尝试设置ACL。

V2.0的新代码:

  # Saves label to S3 bucket
  s3 = Aws::S3::Resource.new
  obj = s3.bucket(ENV['S3_BUCKET_NAME']).object("#{shippinglabel_filename}")
  obj.put(Base64.decode64(label_base64), { :acl => :public_read })

我收到Aws::S3::Errors::InvalidArgument错误,指向ACL。

1 个答案:

答案 0 :(得分:16)

此代码适用于我:

photo_obj = bucket.object object_name
photo_obj.upload_file path, {acl: 'public-read'}

所以你需要为acl使用字符串'public-read'。我通过在object.rb

中看到一个例子找到了这个