Ruby rest-client загрузка файла в виде составной формы данных с базовой аутентификацией

Я понимаю, как сделать запрос http, используя обычную аутентификацию с использованием Ruby.Остальное-клиент

response = RestClient::Request.new(:method => :get, :url => @base_url + path, :user => @sid, :password => @token).execute

и как разместить файл в виде данных из нескольких частей

RestClient.post '/data', :myfile => File.new("/path/to/image.jpg", 'rb')

но я, кажется, не могу понять, как объединить их, чтобы отправить файл на сервер, который требует базовой аутентификации. Кто-нибудь знает, как лучше всего создать этот запрос?

 robustus09 июл. 2012 г., 13:20
на не связанной ноте: вы должны принять больше ответов, это хорошая практика ...

Ответы на вопрос(4)

Вот пример с файлом и некоторыми данными JSON:

require 'rest-client'

payload = {
  :multipart => true,
  :file => File.new('/path/to/file', 'rb'),
  :data => {foo: {bar: true}}.to_json
      }

r = RestClient.post(url, payload, :authorization => token)
Решение Вопроса

Как насчет использованияRestClient::Payload сRestClient::Request... For an example:

request = RestClient::Request.new(
          :method => :post,
          :url => '/data',
          :user => @sid,
          :password => @token,
          :payload => {
            :multipart => true,
            :file => File.new("/path/to/image.jpg", 'rb')
          })      
response = request.execute

RestClient API, похоже, изменился. Вот последний способ загрузить файл, используя базовую аутентификацию:

response = RestClient::Request.execute(
  method: :post,
  url: url,
  user: 'username',
  password: 'password',
  timeout: 600, # Optional
  payload: {
    multipart: true,
    file: File.new('/path/to/file, 'rb')
  }
)

Новейший лучший способ может быть следующим: ссылкавведите описание ссылки здесь

  RestClient.post( url,
  {
    :transfer => {
      :path => '/foo/bar',
      :owner => 'that_guy',
      :group => 'those_guys'
    },
     :upload => {
      :file => File.new(path, 'rb')
    }
  })

Ваш ответ на вопрос