使用aws-sdk - > 2和ruby更改s3文件访问权限

Fla*_*ine 3 ruby api amazon-s3

我尝试将我的项目迁移到aws-sdk 2.需要使用AWS SDK for Ruby - 版本2.我找到了所有方法,但我无法更改对文件的访问权限(公开).在以后的版本中我用这个:

bucket.objects[file_path].acl = :public_read
Run Code Online (Sandbox Code Playgroud)

但我找不到改变新api版本的方法.

这是旧api文档的链接

这是新api文档的链接

roy*_*hri 6

我在此假设您希望在将对象ACL上传到S3后更改它.如果可以,请考虑在将对象发送到S3而不是之后设置ACL.

有两种方法可以做到这一点.它们都相似并执行相同的操作.选择你最喜欢的那个或你更舒服的那个.

使用客户端API

client = Aws::S3::Client.new(region: myregion)
resp = client.put_object_acl({ acl: "public-read", bucket: mybucket, key: mykey })
Run Code Online (Sandbox Code Playgroud)

文档:

http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Client.html#put_object_acl-instance_method


资源API

s3 = Aws::S3::Resource.new(region: myregion)
bucket = s3.bucket(mybucket)
object = bucket.object(mykey)
resp = object.acl.put({ acl: "public-read" })
Run Code Online (Sandbox Code Playgroud)

文档:

http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/ObjectAcl.html#put-instance_method


奖金

如果您的存储桶中的绝对所有对象都需要公开,则可以在整个存储桶中设置默认ACL,以便上传的任何对象都将自动公开,而无需您指定.您可以通过将存储桶策略设置为存储桶来实现此目的.

在Amazon S3中公开存储桶