建议在Ruby中为S3 Bucket生成预签名URL的方法
我正在尝试在我的Rails服务器上生成预先签名的URL以发送到浏览器,以便浏览器可以上传到S3。
似乎aws-sdk-s3
是未来使用的gem。 但不幸的是,我没有遇到可以提供清晰度的gem文档。 似乎有几种不同的方式这样做,并希望对以下方法的差异提供任何指导 –
-
使用
Aws::S3::Presigner.new
( https://github.com/aws/aws-sdk-ruby/blob/master/aws-sdk-core/lib/aws-sdk-core/s3/presigner.rb )但它似乎没有接受对象参数或身份validation凭据。 -
使用
Aws::S3::Resource.new
,但似乎不会维护aws-sdk-resources
。 ( https://aws.amazon.com/blogs/developer/upgrading-from-version-2-to-version-3-of-the-aws-sdk-for-ruby-2/ ) -
使用
Aws::S3::Object.new
然后在该对象上调用put
方法。 -
直接使用
AWS::SigV4
。
我想知道他们是如何不同的,以及选择一个而不是另一个的含义? 非常感谢任何建议,特别是使用aws-sdk-s3
。
谢谢!
所以,感谢上面@strognjz的提示,这里使用`aws-sdk-s3’对我有用。
require 'aws-sdk-s3' #credentials below for the IAM user I am using s3 = Aws::S3::Client.new( region: 'us-west-2', #or any other region access_key_id: AWS_ACCESS_KEY_ID, secret_access_key: AWS_SECRET_ACCESS_KEY ) signer = Aws::S3::Presigner.new(client: s3) url = signer.presigned_url( :put_object, bucket: S3_BUCKET_NAME, key: "${filename}-#{SecureRandom.uuid}" )
这将使用aws-sdk-s3 gem
aws_client = Aws::S3::Client.new( region: 'us-west-2', #or any other region access_key_id: AWS_ACCESS_KEY_ID, secret_access_key: AWS_SECRET_ACCESS_KEY ) s3 = Aws::S3::Resource.new(client: aws_client) bucket = s3.bucket('bucket-name') obj = bucket.object("${filename}-#{SecureRandom.uuid}") url = obj.presigned_url(:put)
额外的http动词:
obj.presigned_url(:put) obj.presigned_url(:head) obj.presigned_url(:delete)
- 回形针回调或简单的处理器?
- 通过单击Amazon S3上托管的链接更改jPlayer上的歌曲
- 需要更改S3 Bucket(Carrierwave / Fog)中文件的存储“目录”
- 密钥就在那里,但我仍然得到`fetch’:找不到密钥:“S3_BUCKET_NAME”(KeyError)
- Ruby on Rails,Paperclip,Heroku,GitHub和AWS – 保护密钥
- Rails 4,Carrierwave-aws,图像在本地上传到amazon s3但未投放到生产中(Openshift)
- AWS S3 IAM策略,用于对单个存储桶执行读写权限
- 将炼油厂cms与Amazon S3 Web服务相连接
- s3如何计算签名