我正在尝试向发送图像和其他一些数据的 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 必须只有 until .com
,其余路径必须conn.post
像这个 example 一样继续/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