ruby-on-rails - Rails - 使用 Faraday 发送图像

标签 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)

我已经尝试了所有我能想到的路径。图像应该保存在法拉第找到的目录中的什么位置?

第二个问题是关于response,如何获取response并进行处理?

第三个是,我一直没明白上次调用的第一个参数有什么用:

conn.post "/hello", payload

我写了“/hello”,但不知道真正的用法是什么。

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

编辑

现在可以了,这是解决方案: 请注意,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

最佳答案

你应该试试这个来回答你的第一个问题:

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

关于ruby-on-rails - Rails - 使用 Faraday 发送图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20117196/

相关文章:

ruby-on-rails - minitest 测试和代码覆盖率

ruby-on-rails - 在 rails 应用程序上安全地保持 https ://secure. yourname.com 和 http ://www. yourname.com 之间的 session

ruby-on-rails - 一台机器上的多个 sidekiq 守护进程

arrays - 按特定顺序组合两个数组

php - 更改 http header 信息以隐藏服务器信息

java - 检查 URL 的 HTTP 连接 (Android)

ruby-on-rails - rails 如何正确地将模型移动到命名空间

ruby-on-rails - 我的客体关系有什么问题吗?

javascript - 我可以使用Ajax切换div吗?

http - 从 MITM 代理获取 "raw"请求\响应