http使用ruby将文件输出到S3预签名URL

时间:2008-09-18 04:56:45

标签: ruby http amazon-s3

任何人都有一个使用ruby发布到s3

上的预签名网址的实例

6 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

您能否提供有关“预先签署的网址”如何运作的更多信息?是这样的:

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

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

答案 2 :(得分:1)

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

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

这适用于我的设备农场上传。

答案 3 :(得分:0)

s3 library page上的任何内容都涵盖了您的需求吗?那里有很多例子。

答案 4 :(得分:0)

Ruby有一些通用的REST库;谷歌为“红宝石休息客户”。另请参阅HTTParty

答案 5 :(得分:-5)

我设法解决了这个问题。事实证明,Ruby中的网络有一些缺点。很多Monkeypatch后来我开始工作..当我有时间时,更多细节。感谢