Ruby – 使用RestClientpost上传文件

我有一个cURL,我试图转换成Ruby。

cURL是这样的:

curl -i -k -H "Accept: application/json" -H "Authorization: token" -H "Content-Type: image/jpeg" -H "Content-Length: 44062" --data-binary "gullfoss.jpg" http://sofzh.miximages.com/ruby/gullfoss.jpg') result = RestClient.post('http://www.someurl.com/objects',image,{'upload' => image, 'Accept' => 'application/json', 'Authorization' => 'token', 'Content-Type' => 'image/jpeg', 'Content-Length' => '44062'}) 

Ruby代码给了我一个400 Bad Request。 授权或其他标题不是问题。 我认为问题在于将–data-binary转换为Ruby。

任何帮助赞赏。

谢谢,阿德里安

有一些事情可能会导致问题。

  1. 您希望将实际的File对象与RestClient使用,因此请使用File.open ; 它返回一个文件对象。
  2. 您在请求中将图像对象包括两次; 您的问题并未明确说明实际内容。 例如,您正在将有效负载元素与标题混合在一起。 根据RestClient.post的签名,它接受参数url, payload, headers={} ,您的请求应采用以下两种forms之一:

端点是否期望命名参数? 如果是,请使用以下内容:

技术1:有效负载包括名为“upload”的字段或参数,并且值设置为图像对象

 result = RestClient.post( 'http://www.someurl.com/objects', { 'upload' => image }, 'Accept' => 'application/json', 'Authorization' => 'token', 'Content-Type' => 'image/jpeg', ) 

端点是否期望进行简单的文件上传? 如果是,那么使用:

技术2:图像文件对象作为唯一有效载荷发送

 result = RestClient.post( 'http://www.someurl.com/objects', image, 'Accept' => 'application/json', 'Authorization' => 'token', 'Content-Type' => 'image/jpeg', ) 

请注意,我没有包含'Content-Length'标题; 使用RestClient时通常不需RestClient因为它在处理文件时会为您插入。

还有另一种使用RestClient发送有效负载的方法。

请务必阅读github上的官方文档 。

我也是RestClient所以如果我错了,在这种情况下不要太苛刻; 我会立即纠正我的任何误解。 希望这可以帮助!