2

任何人都有一个使用 ruby​​ 发布到 s3 上的预签名 URL 的工作示例

4

6 回答 6

2

我都使用了 aws-sdk 和 right_aws 。

这是执行此操作的代码。

require 'rubygems'
require 'aws-sdk'
require 'right_aws'
require 'net/http'
require 'uri'
require 'rack'


access_key_id     = 'AAAAAAAAAAAAAAAAA'
secret_access_key = 'ASDFASDFAS4646ASDFSAFASDFASDFSADF'


s3 = AWS::S3.new(  :access_key_id => access_key_id, :secret_access_key => secret_access_key)

right_s3 = RightAws::S3Interface.new(access_key_id,  secret_access_key,  {:multi_thread => true, :logger => nil} ) 



bucket_name = 'your-bucket-name'
key  = "your-file-name.ext"

right_url = right_s3.put_link(bucket_name, key)
right_scan_command = "curl -I --upload-file #{key} '#{right_url.to_s}'"
system(right_scan_command)

bucket = s3.buckets[bucket_name]
form = bucket.presigned_post(:key => key)
uri = URI(form.url.to_s + '/' + key)
uri.query = Rack::Utils.build_query(form.fields)
scan_command = "curl -I --upload-file #{key} '#{uri.to_s}'"
system(scan_command)
于 2013-02-07T10:09:57.547 回答
1

您能否提供有关“预签名 URL”如何工作的更多信息?是不是这样:

AWS::S3::S3Object.url_for(self.full_filename,
                          self.bucket_name, {
                            :use_ssl => true,
                            :expires_in => ttl_seconds
                          })

我使用此代码将经过身份验证的客户端发送到其 S3 文件的 URL。我相信这是您要询问的“预签名 URL”。我没有将此代码用于 PUT,所以我不确定它是否适合您,但它可能会让您接近。

于 2008-09-19T02:21:56.003 回答
1

我知道这是一个较老的问题,但我想知道同样的事情,并在AWS S3 文档中找到了一个优雅的解决方案。

require 'net/http'

file = "somefile.ext"
url = URI.parse(presigned_url)
Net::HTTP.start(url.host) do |http|
   http.send_request("PUT", url.request_uri, File.read(file), {"content-type" => "",})
end

这对我的 Device Farm 上传非常有用。

于 2018-05-29T17:47:45.497 回答
0

s3 库页面上的内容是否涵盖了您需要的内容?那里有很多例子。

于 2008-09-18T07:25:53.397 回答
0

有一些用于 Ruby 的通用 REST 库;谷歌“红宝石休息客户端”。另请参阅HTTP 派对

于 2008-10-19T15:43:04.673 回答
-5

我已经设法解决了。事实证明,Ruby 中的 HTTP:Net 有一些缺点。很多 Monkeypatch 后来我得到了它的工作.. 当我有时间的时候更多细节。感谢

于 2008-09-20T01:45:42.877 回答