任何人都有一个使用 ruby 发布到 s3 上的预签名 URL 的工作示例
问问题
2817 次
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 回答