Я пытаюсь обратиться к 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
На самом деле правильный ответ файл '= Rails.root.to_s +«/app/assets/images/test.jpg»' Но это помогло мне найти его. А про другие моменты? Есть идеи? – user1573607
@ user1573607 Я обновил свой ответ. (Я не знаю автора вопроса для второго вопроса. Возможно, вам следует распечатать полезную нагрузку [: profile_pic] после вызова «conn.post» и посмотреть, что вы получаете?) – Pol0nium