опубликовать изображение с фарадеем в качестве параметра

У меня есть старый сервис и новый сервис с изображениями. Я хочу перенести изображения со старых на новые. для этого мне нужно получить изображение из моего старого сервиса, а затем опубликовать его в новом сервисе Sinatra. Я смог опубликовать изображение в нужном мне формате, используя NET::HTTP.

  url = URI.parse('http://0.0.0.0:9292/')
  File.open("./Belgium.png") do |jpg|
   req = Net::HTTP::Post::Multipart.new url.path, {"image" => UploadIO.new(jpg, "image/jpeg", "Belgium.jpg"), id:4234}
    res = Net::HTTP.start(url.host, url.port) do |http|
      http.request(req)
    end
  end

Параметры, которые я получаю с помощью вышеуказанного метода публикации в моей службе Sinatra,

params = {"image"=>
  {:filename=>"Belgium.jpg", :type=>"image/jpeg",:name=>"image",:tempfile=> #<File:/var/folders/h7/f9cvygqs3lg78kwh24v8yzp80000gn/T/RackMultipart20120827-76057-1f3inkn>,
 :head=> "Content-Disposition: form-data; name=\"image\";filename=\"Belgium.jpg\"\r\nContent-Length: 28228\r\nContent-Type: image/jpeg\r\nContent-Transfer-Encoding: binary\r\n"},
  "id"=>"4234"}

Но я не смог получить такой же результат с Фарадеем. Я попытался использовать что-то вроде:

payload = { :profile_pic => Faraday::UploadIO.new('avatar.jpg', 'image/jpeg') }
Faraday.post 'http://0.0.0.0:9292/', payload

К моему обслуживанию я получаю что-то вроде этого:
"#‹'UploadIO:0x007fb950373de8>" Объект. Это не то, что я ожидаю от моей службы.

Как я могу добиться того же поведения, что и с Net::HTTP. Я думаю, что нужно что-то делать с промежуточным программным обеспечением, я пытался настроить, но я все еще новичок.


person goyalankit    schedule 27.08.2012    source источник


Ответы (1)


Как насчет:

conn = Faraday.new(:url => 'http://0.0.0.0:9292' ) do |faraday|
  faraday.request :multipart
end
payload = { :profile_pic => Faraday::UploadIO.new('avatar.jpg', 'image/jpeg') }
conn.post 'http://0.0.0.0:9292/', payload
person apneadiving    schedule 27.08.2012