ruby - 如何在 Ruby 中执行相当于 's3cmd setacl --acl-grant=read:82b82d.. s3://somebucket/..' 的操作?

标签 ruby amazon-s3 amazon-cloudfront s3cmd

你如何做等同于:

s3cmd setacl --acl-grant=read:82b82d14a8d011e09d86001cc029a3688cdd635ea8d011e0b499001cc029a3689052a4f4a8d011e0bd25001cc029a368 s3://somebucket/some/path/to/file

在 ruby 中? (最好使用 'aws-s3' gem)

===编辑===

正如 Soren 在下面建议的那样,与此类似的方法应该有效:

grant = AWS::S3::ACL::Grant.new
grant.permission = 'READ'
grantee = AWS::S3::ACL::Grantee.new
grantee.id = '82b82d14a8d011e09d86001cc029a3688cdd635ea8d011e0b499001cc029a3689052a4f4a8d011e0bd25001cc029a368'
grant.grantee = grantee
acl = AWS::S3::S3Object.acl('some/path/to/file', 'somebucket')
acl.grants << grant
AWS::S3::S3Object.acl 'some/path/to/file', 'somebucket', acl 

但是这不起作用,我收到以下错误:

The XML you provided was not well-formed or did not validate against our published schema (AWS::S3::MalformedACLError)

有什么想法可以实现吗?

最佳答案

我无法让它与“aws-s3”gem 一起使用,但它确实可以与“rightscale_aws”gem 一起使用:

require 'right_aws'

s3     = RightAws::S3.new(access_key, secret_key, {:logger => Logger.new('/dev/null')})
bucket =  s3.bucket('somebucket')

bucket.put 'some/path/to/file', open('/tmp/myfile')
access_id = '82b82d14a8d011e09d86001cc029a3688cdd635ea8d011e0b499001cc029a3689052a4f4a8d011e0bd25001cc029a368'
key = bucket.key('some/path/to/file')
RightAws::S3::Grantee.new(key, access_id, ['READ'], :apply)

关于ruby - 如何在 Ruby 中执行相当于 's3cmd setacl --acl-grant=read:82b82d.. s3://somebucket/..' 的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6616189/

相关文章:

ios - 带有自定义 header 的 AWSS3GetPreSignedURLRequest 上传,给出 403

amazon-web-services - 无服务器:部署错误 S3 存储桶已存在于堆栈中

amazon-web-services - Amazon CloudFront 的开源成熟等效项是什么?

html - 如何在ruby中从net//smtp发送电子邮件中的HTML内容?

ruby - 如何在不在标准输出中显示的情况下捕获命令的输出

mysql - 循环访问模型中的表列值

Ruby 并行每个循环

python - 将使用 FFmpeg 截取的屏幕截图保存到 Amazon S3 存储桶中

reactjs - 通过 Cloudfront 在 S3 上使用 React 路由器来 React SPA。无法刷新或直接加载链接

reactjs - React 应用程序托管在 s3 意外 token 上 <