【问题标题】:Rails - Sending image using FaradayRails - 使用法拉第发送图像
【发布时间】:2013-11-21 09:36:18
【问题描述】:

我正在尝试向发送图像和其他一些数据的 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)

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

第二个问题是关于响应的,如何获取响应并处理?

第三个是那个,我还没明白最后一次调用的第一个参数有什么用处:

conn.post "/hello", payload

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

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

编辑

现在它正在工作,这是解决方案: 请注意,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

【问题讨论】:

  • 如果我只想发送带有指定 image.jpeg @user15 的 http 请求的音频,我该怎么办

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


【解决方案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

【讨论】:

  • 其实正确答案是file = Rails.root.to_s + "/app/assets/images/test.jpg" 但它帮助我找到了答案。关于其他点?有什么想法吗?
  • @user1573607 我更新了我的答案。 (我不知道第二个问题的答案,也许你应该在 conn.post 调用之后打印 payload[:profile_pic] 看看你得到了什么?)
猜你喜欢
  • 2021-10-06
  • 2012-08-22
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 2021-11-06
相关资源
最近更新 更多