Rails - 使用法拉第发送图像

时间:2013-11-21 09:36:18

标签: ruby-on-rails ruby http directory faraday

我正在尝试向API发送图像和其他一些数据,并获得响应。那是我的代码:

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)

我已经尝试了所有可以想象的路径。应该将图像保存在法拉第找到的目录中?

第二个问题是关于响应,我如何得到响应并处理它?<​​/ p>

第三个是,我不明白最后一次调用的第一个参数的效用是什么:

conn.post "/hello", payload

我写过“/ hello”,但对实际使用情况一无所知。

最后一个。我可以发送保存在变量中的原始图像,而不是发送到法拉第的路径吗?

修改

现在它正在运行,这是解决方案: 请注意,网址必须仅在.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 个答案:

答案 0 :(得分: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