2013-11-21 40 views
2

我正在嘗試向發送圖像和其他數據的API發送請求,並獲取響應。這是我的代碼:Rails - 使用法拉第發送圖像

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嗎?

編輯

現在,它的工作,這是解決方案: 注意,url必須只有等到.com,該路徑的其餘部分必須繼續conn.post這樣的例子/v1/searchc.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" 

關於第三個問題,第一個參數,可以讓你從基地「api_url」構建正確的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我更新了我的答案。 (我不知道第二個問題的答案,也許你應該在conn.post調用後打印payload [:profile_pic],並看看你得到了什麼?) – Pol0nium