http PUT файл на предварительно назначенные URL S3, используя ruby - PullRequest
2 голосов
/ 18 сентября 2008

Кто-нибудь получил рабочий пример использования ruby ​​для публикации на заданном URL-адресе на s3

Ответы [ 6 ]

2 голосов
/ 07 февраля 2013

Я использовал 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 голос
/ 29 мая 2018

Я знаю, что это старый вопрос, но мне было интересно то же самое, и я нашел элегантное решение в документации 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.

1 голос
/ 19 сентября 2008

Можете ли вы предоставить больше информации о том, как работает «предопределенный URL»? Это так:

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

Я использую этот код для отправки аутентифицированным клиентам URL-адреса их файла S3. Я считаю, что это «предопределенный URL», о котором вы спрашиваете. Я не использовал этот код для PUT, поэтому я не совсем уверен, подходит ли он вам, но он может приблизить вас.

0 голосов
/ 19 октября 2008

Есть несколько общих библиотек REST для Ruby; Google для "клиента ruby ​​rest". Смотрите также HTTParty .

0 голосов
/ 20 сентября 2008

Мне удалось разобраться. Оказывается, HTTP: Net в Ruby имеет некоторые недостатки. Много Monkeypatch позже, я получил его работать .. Более подробно, когда у меня есть время спасибо

0 голосов
/ 18 сентября 2008

Что-нибудь на странице библиотеки s3 покрывает то, что вам нужно? Там множество примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...