任何人都有一个使用ruby发布到s3
上的预签名网址的实例答案 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后来我开始工作..当我有时间时,更多细节。感谢