2013-11-21 2 views
2

Я пытаюсь обратиться к API, отправляющему изображение и некоторые другие данные, и получить ответ. Вот мой код:Rails - Отправка изображения с использованием Faraday

file = "assets/images/test.jpg" 
conn = Faraday.new(:url => "api_url") do |faraday| 
    faraday.request :multipart 
end 
payload = { :profile_pic => Faraday::UploadIO.new(file, 'image/jpeg') } 
conn.post "/test", payload 

Моя первая проблема заключается в том, что я всегда получаю следующее сообщение об ошибке:

Errno::ENOENT (No such file or directory - assets/images/test.png) 

Я пробовал все пути я мог себе представить. Где нужно сохранить изображение в каталогах, которое может найти Фарадей?

Второй вопрос касается ответа, как я могу получить ответ и обработать его?

Третий является то, что я не понимаю, что полезность первого параметра последнего вызова:

conn.post "/hello", payload 

я написал «/ привет», но не имеют ни малейшего представления о каково реальное использование.

И последний. Могу ли я отправить необработанное изображение, сохраненное в переменной, вместо отправки пути к Faraday?

EDIT

Теперь он работает, это решение: Имейте в виде, что URL должен быть только до .com, остальная части пути должен идти на conn.post как в этом примере /v1/search. c.adapter :net_http был необходим. Ответ на сообщение корректно обрабатывается в переменной json.

Решение:

url = 'http://url.com' 

    file = Rails.root.to_s + "/app/assets/images/test.jpg" 
    conn = Faraday.new(:url => url) do |c| 
    c.request :multipart 
    c.adapter :net_http 
    end 
    payload = { :image => Faraday::UploadIO.new(file, 'image/jpeg'), :token => token} 

    response = conn.post '/v1/search', payload 
    json = JSON.parse response.body 

ответ

1

Вы должны попробовать это на ваш первый вопрос:

file = Rails.root.to_s + "/app/assets/images/test.jpg" 

Для вашего третьего вопроса, то первые параметры позволяет построить правильный URL из базы «api_url» , Пожалуйста, смотрите пример с Readme.

## POST ## 

conn.post '/nigiri', { :name => 'Maguro' } # POST "name=maguro" to http://sushi.com/nigiri 
+0

На самом деле правильный ответ файл '= Rails.root.to_s +«/app/assets/images/test.jpg»' Но это помогло мне найти его. А про другие моменты? Есть идеи? – user1573607

+0

@ user1573607 Я обновил свой ответ. (Я не знаю автора вопроса для второго вопроса. Возможно, вам следует распечатать полезную нагрузку [: profile_pic] после вызова «conn.post» и посмотреть, что вы получаете?) – Pol0nium